
// this is autogenerated file, do not edit it.
#include "ficus/ficus.h"

struct _fx_N20LexerUtils__stream_t_data_t;

static void _fx_free_N20LexerUtils__stream_t(struct _fx_N20LexerUtils__stream_t_data_t** dst);

struct _fx_N13Ast__binary_t_data_t;

static void _fx_free_N13Ast__binary_t(struct _fx_N13Ast__binary_t_data_t** dst);

struct _fx_Nt10Hashmap__t2ST2N14Lexer__token_ti_data_t;

static void _fx_free_Nt10Hashmap__t2ST2N14Lexer__token_ti(struct _fx_Nt10Hashmap__t2ST2N14Lexer__token_ti_data_t** dst);

typedef struct _fx_R8format_t {
   char_ fill;
   char_ align;
   char_ sign;
   bool num_alt;
   int_ width;
   int_ precision;
   char_ grouping;
   char_ typ;
} _fx_R8format_t;

typedef struct _fx_T2R8format_ti {
   struct _fx_R8format_t t0;
   int_ t1;
} _fx_T2R8format_ti;

typedef struct _fx_Ta2i {
   int_ t0;
   int_ t1;
} _fx_Ta2i;

typedef struct _fx_T2Ta2iS {
   struct _fx_Ta2i t0;
   fx_str_t t1;
} _fx_T2Ta2iS;

typedef struct _fx_T4SiiS {
   fx_str_t t0;
   int_ t1;
   int_ t2;
   fx_str_t t3;
} _fx_T4SiiS;

typedef struct _fx_N20LexerUtils__stream_t_data_t {
   int_ rc;
   union {
      struct _fx_T4SiiS stream_t;
   } u;
} _fx_N20LexerUtils__stream_t_data_t, *_fx_N20LexerUtils__stream_t;

typedef struct _fx_T3CiB {
   char_ t0;
   int_ t1;
   bool t2;
} _fx_T3CiB;

typedef struct _fx_T5ildiC {
   int_ t0;
   int64_t t1;
   double t2;
   int_ t3;
   char_ t4;
} _fx_T5ildiC;

typedef struct _fx_T4iSiB {
   int_ t0;
   fx_str_t t1;
   int_ t2;
   bool t3;
} _fx_T4iSiB;

typedef struct _fx_R10Ast__loc_t {
   int_ m_idx;
   int_ line0;
   int_ col0;
   int_ line1;
   int_ col1;
} _fx_R10Ast__loc_t;

typedef struct _fx_T2R10Ast__loc_tS {
   struct _fx_R10Ast__loc_t t0;
   fx_str_t t1;
} _fx_T2R10Ast__loc_tS;

typedef struct _fx_T2il {
   int_ t0;
   int64_t t1;
} _fx_T2il;

typedef struct _fx_T2iq {
   int_ t0;
   uint64_t t1;
} _fx_T2iq;

typedef struct _fx_T2id {
   int_ t0;
   double t1;
} _fx_T2id;

typedef struct _fx_N10Ast__lit_t {
   int tag;
   union {
      int64_t LitInt;
      struct _fx_T2il LitSInt;
      struct _fx_T2iq LitUInt;
      struct _fx_T2id LitFloat;
      fx_str_t LitString;
      char_ LitChar;
      bool LitBool;
   } u;
} _fx_N10Ast__lit_t;

typedef struct _fx_N12Ast__cmpop_t {
   int tag;
} _fx_N12Ast__cmpop_t;

typedef struct _fx_N13Ast__binary_t_data_t {
   int_ rc;
   int tag;
   union {
      struct _fx_N12Ast__cmpop_t OpCmp;
      struct _fx_N12Ast__cmpop_t OpDotCmp;
      struct _fx_N13Ast__binary_t_data_t* OpAugBinary;
   } u;
} _fx_N13Ast__binary_t_data_t, *_fx_N13Ast__binary_t;

typedef struct _fx_rB_data_t {
   int_ rc;
   bool data;
} _fx_rB_data_t, *_fx_rB;

typedef struct _fx_ri_data_t {
   int_ rc;
   int_ data;
} _fx_ri_data_t, *_fx_ri;

typedef struct _fx_T2BS {
   bool t0;
   fx_str_t t1;
} _fx_T2BS;

typedef struct _fx_N14Lexer__token_t {
   int tag;
   union {
      struct _fx_N10Ast__lit_t LITERAL;
      struct _fx_T2BS IDENT;
      fx_str_t TYVAR;
      fx_str_t DATA;
      bool FOR;
      bool IMPORT;
      bool REF;
      bool RETURN;
      bool WHILE;
      bool LPAREN;
      bool LSQUARE;
      bool BACKSLASH;
      bool MINUS;
      bool PLUS;
      bool STAR;
      bool DOT_PLUS;
      bool DOT_MINUS;
      struct _fx_N13Ast__binary_t_data_t* AUG_BINOP;
      struct _fx_N12Ast__cmpop_t CMP;
      struct _fx_N12Ast__cmpop_t DOT_CMP;
      fx_str_t RESERVED;
   } u;
} _fx_N14Lexer__token_t;

typedef struct _fx_T2N14Lexer__token_ti {
   struct _fx_N14Lexer__token_t t0;
   int_ t1;
} _fx_T2N14Lexer__token_ti;

typedef struct _fx_Nt6option1T2N14Lexer__token_ti {
   int tag;
   union {
      struct _fx_T2N14Lexer__token_ti Some;
   } u;
} _fx_Nt6option1T2N14Lexer__token_ti;

typedef struct _fx_Nt6option1R8format_t {
   int tag;
   union {
      struct _fx_R8format_t Some;
   } u;
} _fx_Nt6option1R8format_t;

typedef struct _fx_T2ST2N14Lexer__token_ti {
   fx_str_t t0;
   struct _fx_T2N14Lexer__token_ti t1;
} _fx_T2ST2N14Lexer__token_ti;

typedef struct _fx_LT2ST2N14Lexer__token_ti_data_t {
   int_ rc;
   struct _fx_LT2ST2N14Lexer__token_ti_data_t* tl;
   struct _fx_T2ST2N14Lexer__token_ti hd;
} _fx_LT2ST2N14Lexer__token_ti_data_t, *_fx_LT2ST2N14Lexer__token_ti;

typedef struct _fx_T2N14Lexer__token_tTa2i {
   struct _fx_N14Lexer__token_t t0;
   struct _fx_Ta2i t1;
} _fx_T2N14Lexer__token_tTa2i;

typedef struct _fx_LT2N14Lexer__token_tTa2i_data_t {
   int_ rc;
   struct _fx_LT2N14Lexer__token_tTa2i_data_t* tl;
   struct _fx_T2N14Lexer__token_tTa2i hd;
} _fx_LT2N14Lexer__token_tTa2i_data_t, *_fx_LT2N14Lexer__token_tTa2i;

typedef struct _fx_LN14Lexer__token_t_data_t {
   int_ rc;
   struct _fx_LN14Lexer__token_t_data_t* tl;
   struct _fx_N14Lexer__token_t hd;
} _fx_LN14Lexer__token_t_data_t, *_fx_LN14Lexer__token_t;

typedef struct _fx_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti {
   uint64_t hv;
   fx_str_t key;
   struct _fx_T2N14Lexer__token_ti data;
} _fx_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti;

typedef struct _fx_T6Rt20Hashmap__hashentry_t2ST2N14Lexer__token_tiiiiA1iA1Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti {
   struct _fx_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti t0;
   int_ t1;
   int_ t2;
   int_ t3;
   fx_arr_t t4;
   fx_arr_t t5;
} _fx_T6Rt20Hashmap__hashentry_t2ST2N14Lexer__token_tiiiiA1iA1Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti;

typedef struct _fx_Nt10Hashmap__t2ST2N14Lexer__token_ti_data_t {
   int_ rc;
   union {
      struct _fx_T6Rt20Hashmap__hashentry_t2ST2N14Lexer__token_tiiiiA1iA1Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti t;
   } u;
} _fx_Nt10Hashmap__t2ST2N14Lexer__token_ti_data_t, *_fx_Nt10Hashmap__t2ST2N14Lexer__token_ti;

typedef struct _fx_Ta2S {
   fx_str_t t0;
   fx_str_t t1;
} _fx_Ta2S;

typedef struct _fx_T2N14Lexer__token_tC {
   struct _fx_N14Lexer__token_t t0;
   char_ t1;
} _fx_T2N14Lexer__token_tC;

typedef struct _fx_T2iT2N14Lexer__token_tC {
   int_ t0;
   struct _fx_T2N14Lexer__token_tC t1;
} _fx_T2iT2N14Lexer__token_tC;

typedef struct _fx_FPLT2N14Lexer__token_tTa2i0 {
   int (*fp)(struct _fx_LT2N14Lexer__token_tTa2i_data_t**, void*);
   fx_fcv_t* fcv;
} _fx_FPLT2N14Lexer__token_tTa2i0;

typedef struct _fx_rLT2N14Lexer__token_tTa2i_data_t {
   int_ rc;
   struct _fx_LT2N14Lexer__token_tTa2i_data_t* data;
} _fx_rLT2N14Lexer__token_tTa2i_data_t, *_fx_rLT2N14Lexer__token_tTa2i;

typedef struct _fx_rTa2i_data_t {
   int_ rc;
   struct _fx_Ta2i data;
} _fx_rTa2i_data_t, *_fx_rTa2i;

typedef struct _fx_rNt6option1R8format_t_data_t {
   int_ rc;
   struct _fx_Nt6option1R8format_t data;
} _fx_rNt6option1R8format_t_data_t, *_fx_rNt6option1R8format_t;

typedef struct _fx_T2iS {
   int_ t0;
   fx_str_t t1;
} _fx_T2iS;

typedef struct {
   int_ rc;
   int_ data;
} _fx_E4Exit_data_t;

typedef struct {
   int_ rc;
   fx_str_t data;
} _fx_E4Fail_data_t;

typedef struct {
   int_ rc;
   struct _fx_T2Ta2iS data;
} _fx_E22LexerUtils__LexerError_data_t;

typedef struct {
   int_ rc;
   struct _fx_T2R10Ast__loc_tS data;
} _fx_E17Ast__CompileError_data_t;

static void _fx_free_T2Ta2iS(struct _fx_T2Ta2iS* dst)
{
   fx_free_str(&dst->t1);
}

static void _fx_copy_T2Ta2iS(struct _fx_T2Ta2iS* src, struct _fx_T2Ta2iS* dst)
{
   dst->t0 = src->t0;
   fx_copy_str(&src->t1, &dst->t1);
}

static void _fx_make_T2Ta2iS(struct _fx_Ta2i* t0, fx_str_t* t1, struct _fx_T2Ta2iS* fx_result)
{
   fx_result->t0 = *t0;
   fx_copy_str(t1, &fx_result->t1);
}

static void _fx_free_T4SiiS(struct _fx_T4SiiS* dst)
{
   fx_free_str(&dst->t0);
   fx_free_str(&dst->t3);
}

static void _fx_copy_T4SiiS(struct _fx_T4SiiS* src, struct _fx_T4SiiS* dst)
{
   fx_copy_str(&src->t0, &dst->t0);
   dst->t1 = src->t1;
   dst->t2 = src->t2;
   fx_copy_str(&src->t3, &dst->t3);
}

static void _fx_make_T4SiiS(fx_str_t* t0, int_ t1, int_ t2, fx_str_t* t3, struct _fx_T4SiiS* fx_result)
{
   fx_copy_str(t0, &fx_result->t0);
   fx_result->t1 = t1;
   fx_result->t2 = t2;
   fx_copy_str(t3, &fx_result->t3);
}

static void _fx_free_N20LexerUtils__stream_t(struct _fx_N20LexerUtils__stream_t_data_t** dst)
{
   if (*dst && FX_DECREF((*dst)->rc) == 1) {
      _fx_free_T4SiiS(&(*dst)->u.stream_t); fx_free(*dst);
   }
   *dst = 0;
}

static void _fx_free_T4iSiB(struct _fx_T4iSiB* dst)
{
   fx_free_str(&dst->t1);
}

static void _fx_copy_T4iSiB(struct _fx_T4iSiB* src, struct _fx_T4iSiB* dst)
{
   dst->t0 = src->t0;
   fx_copy_str(&src->t1, &dst->t1);
   dst->t2 = src->t2;
   dst->t3 = src->t3;
}

static void _fx_make_T4iSiB(int_ t0, fx_str_t* t1, int_ t2, bool t3, struct _fx_T4iSiB* fx_result)
{
   fx_result->t0 = t0;
   fx_copy_str(t1, &fx_result->t1);
   fx_result->t2 = t2;
   fx_result->t3 = t3;
}

static void _fx_free_T2R10Ast__loc_tS(struct _fx_T2R10Ast__loc_tS* dst)
{
   fx_free_str(&dst->t1);
}

static void _fx_copy_T2R10Ast__loc_tS(struct _fx_T2R10Ast__loc_tS* src, struct _fx_T2R10Ast__loc_tS* dst)
{
   dst->t0 = src->t0;
   fx_copy_str(&src->t1, &dst->t1);
}

static void _fx_make_T2R10Ast__loc_tS(struct _fx_R10Ast__loc_t* t0, fx_str_t* t1, struct _fx_T2R10Ast__loc_tS* fx_result)
{
   fx_result->t0 = *t0;
   fx_copy_str(t1, &fx_result->t1);
}

static void _fx_free_N10Ast__lit_t(struct _fx_N10Ast__lit_t* dst)
{
   switch (dst->tag) {
   case 5:
      fx_free_str(&dst->u.LitString); break;
   default:
      ;
   }
   dst->tag = 0;
}

static void _fx_copy_N10Ast__lit_t(struct _fx_N10Ast__lit_t* src, struct _fx_N10Ast__lit_t* dst)
{
   dst->tag = src->tag;
   switch (src->tag) {
   case 5:
      fx_copy_str(&src->u.LitString, &dst->u.LitString); break;
   default:
      dst->u = src->u;
   }
}

static void _fx_free_N13Ast__binary_t(struct _fx_N13Ast__binary_t_data_t** dst)
{
   if (*dst && FX_DECREF((*dst)->rc) == 1) {
      switch ((*dst)->tag) {
      case 27:
         _fx_free_N13Ast__binary_t(&(*dst)->u.OpAugBinary); break;
      default:
         ;
      }
      fx_free(*dst);
   }
   *dst = 0;
}

static int _fx_make_rB(bool arg, struct _fx_rB_data_t** fx_result)
{
   FX_MAKE_REF_IMPL(_fx_rB, FX_COPY_SIMPLE);
}

static int _fx_make_ri(int_ arg, struct _fx_ri_data_t** fx_result)
{
   FX_MAKE_REF_IMPL(_fx_ri, FX_COPY_SIMPLE);
}

static void _fx_free_T2BS(struct _fx_T2BS* dst)
{
   fx_free_str(&dst->t1);
}

static void _fx_copy_T2BS(struct _fx_T2BS* src, struct _fx_T2BS* dst)
{
   dst->t0 = src->t0;
   fx_copy_str(&src->t1, &dst->t1);
}

static void _fx_make_T2BS(bool t0, fx_str_t* t1, struct _fx_T2BS* fx_result)
{
   fx_result->t0 = t0;
   fx_copy_str(t1, &fx_result->t1);
}

static void _fx_free_N14Lexer__token_t(struct _fx_N14Lexer__token_t* dst)
{
   switch (dst->tag) {
   case 1:
      _fx_free_N10Ast__lit_t(&dst->u.LITERAL); break;
   case 2:
      _fx_free_T2BS(&dst->u.IDENT); break;
   case 3:
      fx_free_str(&dst->u.TYVAR); break;
   case 13:
      fx_free_str(&dst->u.DATA); break;
   case 88:
      _fx_free_N13Ast__binary_t(&dst->u.AUG_BINOP); break;
   case 94:
      fx_free_str(&dst->u.RESERVED); break;
   default:
      ;
   }
   dst->tag = 0;
}

static void _fx_copy_N14Lexer__token_t(struct _fx_N14Lexer__token_t* src, struct _fx_N14Lexer__token_t* dst)
{
   dst->tag = src->tag;
   switch (src->tag) {
   case 1:
      _fx_copy_N10Ast__lit_t(&src->u.LITERAL, &dst->u.LITERAL); break;
   case 2:
      _fx_copy_T2BS(&src->u.IDENT, &dst->u.IDENT); break;
   case 3:
      fx_copy_str(&src->u.TYVAR, &dst->u.TYVAR); break;
   case 13:
      fx_copy_str(&src->u.DATA, &dst->u.DATA); break;
   case 88:
      FX_COPY_PTR(src->u.AUG_BINOP, &dst->u.AUG_BINOP); break;
   case 94:
      fx_copy_str(&src->u.RESERVED, &dst->u.RESERVED); break;
   default:
      dst->u = src->u;
   }
}

static void _fx_free_T2N14Lexer__token_ti(struct _fx_T2N14Lexer__token_ti* dst)
{
   _fx_free_N14Lexer__token_t(&dst->t0);
}

static void _fx_copy_T2N14Lexer__token_ti(struct _fx_T2N14Lexer__token_ti* src, struct _fx_T2N14Lexer__token_ti* dst)
{
   _fx_copy_N14Lexer__token_t(&src->t0, &dst->t0);
   dst->t1 = src->t1;
}

static void _fx_make_T2N14Lexer__token_ti(struct _fx_N14Lexer__token_t* t0, int_ t1, struct _fx_T2N14Lexer__token_ti* fx_result)
{
   _fx_copy_N14Lexer__token_t(t0, &fx_result->t0);
   fx_result->t1 = t1;
}

static void _fx_free_Nt6option1T2N14Lexer__token_ti(struct _fx_Nt6option1T2N14Lexer__token_ti* dst)
{
   switch (dst->tag) {
   case 2:
      _fx_free_T2N14Lexer__token_ti(&dst->u.Some); break;
   default:
      ;
   }
   dst->tag = 0;
}

static void _fx_copy_Nt6option1T2N14Lexer__token_ti(
   struct _fx_Nt6option1T2N14Lexer__token_ti* src,
   struct _fx_Nt6option1T2N14Lexer__token_ti* dst)
{
   dst->tag = src->tag;
   switch (src->tag) {
   case 2:
      _fx_copy_T2N14Lexer__token_ti(&src->u.Some, &dst->u.Some); break;
   default:
      dst->u = src->u;
   }
}

static void _fx_free_T2ST2N14Lexer__token_ti(struct _fx_T2ST2N14Lexer__token_ti* dst)
{
   fx_free_str(&dst->t0);
   _fx_free_T2N14Lexer__token_ti(&dst->t1);
}

static void _fx_copy_T2ST2N14Lexer__token_ti(struct _fx_T2ST2N14Lexer__token_ti* src, struct _fx_T2ST2N14Lexer__token_ti* dst)
{
   fx_copy_str(&src->t0, &dst->t0);
   _fx_copy_T2N14Lexer__token_ti(&src->t1, &dst->t1);
}

static void _fx_make_T2ST2N14Lexer__token_ti(
   fx_str_t* t0,
   struct _fx_T2N14Lexer__token_ti* t1,
   struct _fx_T2ST2N14Lexer__token_ti* fx_result)
{
   fx_copy_str(t0, &fx_result->t0);
   _fx_copy_T2N14Lexer__token_ti(t1, &fx_result->t1);
}

static void _fx_free_LT2ST2N14Lexer__token_ti(struct _fx_LT2ST2N14Lexer__token_ti_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LT2ST2N14Lexer__token_ti, _fx_free_T2ST2N14Lexer__token_ti);
}

static int _fx_cons_LT2ST2N14Lexer__token_ti(
   struct _fx_T2ST2N14Lexer__token_ti* hd,
   struct _fx_LT2ST2N14Lexer__token_ti_data_t* tl,
   bool addref_tl,
   struct _fx_LT2ST2N14Lexer__token_ti_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LT2ST2N14Lexer__token_ti, _fx_copy_T2ST2N14Lexer__token_ti);
}

static void _fx_free_T2N14Lexer__token_tTa2i(struct _fx_T2N14Lexer__token_tTa2i* dst)
{
   _fx_free_N14Lexer__token_t(&dst->t0);
}

static void _fx_copy_T2N14Lexer__token_tTa2i(struct _fx_T2N14Lexer__token_tTa2i* src, struct _fx_T2N14Lexer__token_tTa2i* dst)
{
   _fx_copy_N14Lexer__token_t(&src->t0, &dst->t0);
   dst->t1 = src->t1;
}

static void _fx_make_T2N14Lexer__token_tTa2i(
   struct _fx_N14Lexer__token_t* t0,
   struct _fx_Ta2i* t1,
   struct _fx_T2N14Lexer__token_tTa2i* fx_result)
{
   _fx_copy_N14Lexer__token_t(t0, &fx_result->t0);
   fx_result->t1 = *t1;
}

static void _fx_free_LT2N14Lexer__token_tTa2i(struct _fx_LT2N14Lexer__token_tTa2i_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LT2N14Lexer__token_tTa2i, _fx_free_T2N14Lexer__token_tTa2i);
}

static int _fx_cons_LT2N14Lexer__token_tTa2i(
   struct _fx_T2N14Lexer__token_tTa2i* hd,
   struct _fx_LT2N14Lexer__token_tTa2i_data_t* tl,
   bool addref_tl,
   struct _fx_LT2N14Lexer__token_tTa2i_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LT2N14Lexer__token_tTa2i, _fx_copy_T2N14Lexer__token_tTa2i);
}

static void _fx_free_LN14Lexer__token_t(struct _fx_LN14Lexer__token_t_data_t** dst)
{
   FX_FREE_LIST_IMPL(_fx_LN14Lexer__token_t, _fx_free_N14Lexer__token_t);
}

static int _fx_cons_LN14Lexer__token_t(
   struct _fx_N14Lexer__token_t* hd,
   struct _fx_LN14Lexer__token_t_data_t* tl,
   bool addref_tl,
   struct _fx_LN14Lexer__token_t_data_t** fx_result)
{
   FX_MAKE_LIST_IMPL(_fx_LN14Lexer__token_t, _fx_copy_N14Lexer__token_t);
}

static void _fx_free_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti(
   struct _fx_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti* dst)
{
   fx_free_str(&dst->key);
   _fx_free_T2N14Lexer__token_ti(&dst->data);
}

static void _fx_copy_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti(
   struct _fx_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti* src,
   struct _fx_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti* dst)
{
   dst->hv = src->hv;
   fx_copy_str(&src->key, &dst->key);
   _fx_copy_T2N14Lexer__token_ti(&src->data, &dst->data);
}

static void _fx_make_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti(
   uint64_t r_hv,
   fx_str_t* r_key,
   struct _fx_T2N14Lexer__token_ti* r_data,
   struct _fx_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti* fx_result)
{
   fx_result->hv = r_hv;
   fx_copy_str(r_key, &fx_result->key);
   _fx_copy_T2N14Lexer__token_ti(r_data, &fx_result->data);
}

static void _fx_free_T6Rt20Hashmap__hashentry_t2ST2N14Lexer__token_tiiiiA1iA1Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti(
   struct _fx_T6Rt20Hashmap__hashentry_t2ST2N14Lexer__token_tiiiiA1iA1Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti* dst)
{
   _fx_free_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti(&dst->t0);
   fx_free_arr(&dst->t4);
   fx_free_arr(&dst->t5);
}

static void _fx_copy_T6Rt20Hashmap__hashentry_t2ST2N14Lexer__token_tiiiiA1iA1Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti(
   struct _fx_T6Rt20Hashmap__hashentry_t2ST2N14Lexer__token_tiiiiA1iA1Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti* src,
   struct _fx_T6Rt20Hashmap__hashentry_t2ST2N14Lexer__token_tiiiiA1iA1Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti* dst)
{
   _fx_copy_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti(&src->t0, &dst->t0);
   dst->t1 = src->t1;
   dst->t2 = src->t2;
   dst->t3 = src->t3;
   fx_copy_arr(&src->t4, &dst->t4);
   fx_copy_arr(&src->t5, &dst->t5);
}

static void _fx_make_T6Rt20Hashmap__hashentry_t2ST2N14Lexer__token_tiiiiA1iA1Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti(
   struct _fx_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti* t0,
   int_ t1,
   int_ t2,
   int_ t3,
   fx_arr_t* t4,
   fx_arr_t* t5,
   struct _fx_T6Rt20Hashmap__hashentry_t2ST2N14Lexer__token_tiiiiA1iA1Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti* fx_result)
{
   _fx_copy_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti(t0, &fx_result->t0);
   fx_result->t1 = t1;
   fx_result->t2 = t2;
   fx_result->t3 = t3;
   fx_copy_arr(t4, &fx_result->t4);
   fx_copy_arr(t5, &fx_result->t5);
}

static void _fx_free_Nt10Hashmap__t2ST2N14Lexer__token_ti(struct _fx_Nt10Hashmap__t2ST2N14Lexer__token_ti_data_t** dst)
{
   if (*dst && FX_DECREF((*dst)->rc) == 1) {
      _fx_free_T6Rt20Hashmap__hashentry_t2ST2N14Lexer__token_tiiiiA1iA1Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti(
         &(*dst)->u.t);
      fx_free(*dst);
   }
   *dst = 0;
}

static void _fx_free_Ta2S(struct _fx_Ta2S* dst)
{
   fx_free_str(&dst->t0);
   fx_free_str(&dst->t1);
}

static void _fx_copy_Ta2S(struct _fx_Ta2S* src, struct _fx_Ta2S* dst)
{
   fx_copy_str(&src->t0, &dst->t0);
   fx_copy_str(&src->t1, &dst->t1);
}

static void _fx_make_Ta2S(fx_str_t* t0, fx_str_t* t1, struct _fx_Ta2S* fx_result)
{
   fx_copy_str(t0, &fx_result->t0);
   fx_copy_str(t1, &fx_result->t1);
}

static void _fx_free_T2N14Lexer__token_tC(struct _fx_T2N14Lexer__token_tC* dst)
{
   _fx_free_N14Lexer__token_t(&dst->t0);
}

static void _fx_copy_T2N14Lexer__token_tC(struct _fx_T2N14Lexer__token_tC* src, struct _fx_T2N14Lexer__token_tC* dst)
{
   _fx_copy_N14Lexer__token_t(&src->t0, &dst->t0);
   dst->t1 = src->t1;
}

static void _fx_make_T2N14Lexer__token_tC(
   struct _fx_N14Lexer__token_t* t0,
   char_ t1,
   struct _fx_T2N14Lexer__token_tC* fx_result)
{
   _fx_copy_N14Lexer__token_t(t0, &fx_result->t0);
   fx_result->t1 = t1;
}

static void _fx_free_T2iT2N14Lexer__token_tC(struct _fx_T2iT2N14Lexer__token_tC* dst)
{
   _fx_free_T2N14Lexer__token_tC(&dst->t1);
}

static void _fx_copy_T2iT2N14Lexer__token_tC(struct _fx_T2iT2N14Lexer__token_tC* src, struct _fx_T2iT2N14Lexer__token_tC* dst)
{
   dst->t0 = src->t0;
   _fx_copy_T2N14Lexer__token_tC(&src->t1, &dst->t1);
}

static void _fx_make_T2iT2N14Lexer__token_tC(
   int_ t0,
   struct _fx_T2N14Lexer__token_tC* t1,
   struct _fx_T2iT2N14Lexer__token_tC* fx_result)
{
   fx_result->t0 = t0;
   _fx_copy_T2N14Lexer__token_tC(t1, &fx_result->t1);
}

static void _fx_free_rLT2N14Lexer__token_tTa2i(struct _fx_rLT2N14Lexer__token_tTa2i_data_t** dst)
{
   FX_FREE_REF_IMPL(_fx_rLT2N14Lexer__token_tTa2i, _fx_free_LT2N14Lexer__token_tTa2i);
}

static int _fx_make_rLT2N14Lexer__token_tTa2i(
   struct _fx_LT2N14Lexer__token_tTa2i_data_t* arg,
   struct _fx_rLT2N14Lexer__token_tTa2i_data_t** fx_result)
{
   FX_MAKE_REF_IMPL(_fx_rLT2N14Lexer__token_tTa2i, FX_COPY_PTR);
}

static int _fx_make_rTa2i(struct _fx_Ta2i* arg, struct _fx_rTa2i_data_t** fx_result)
{
   FX_MAKE_REF_IMPL(_fx_rTa2i, FX_COPY_SIMPLE_BY_PTR);
}

static int _fx_make_rNt6option1R8format_t(
   struct _fx_Nt6option1R8format_t* arg,
   struct _fx_rNt6option1R8format_t_data_t** fx_result)
{
   FX_MAKE_REF_IMPL(_fx_rNt6option1R8format_t, FX_COPY_SIMPLE_BY_PTR);
}

static void _fx_free_T2iS(struct _fx_T2iS* dst)
{
   fx_free_str(&dst->t1);
}

static void _fx_copy_T2iS(struct _fx_T2iS* src, struct _fx_T2iS* dst)
{
   dst->t0 = src->t0;
   fx_copy_str(&src->t1, &dst->t1);
}

static void _fx_make_T2iS(int_ t0, fx_str_t* t1, struct _fx_T2iS* fx_result)
{
   fx_result->t0 = t0;
   fx_copy_str(t1, &fx_result->t1);
}

_fx_Nt6option1T2N14Lexer__token_ti _fx_g11Lexer__None = { 1 };
_fx_Nt6option1R8format_t _fx_g13Lexer__None1_ = { 1 };
_fx_N10Ast__lit_t _fx_g15Lexer__LitEmpty = { 8 };
_fx_N10Ast__lit_t _fx_g14Lexer__LitNull = { 9 };
_fx_N12Ast__cmpop_t _fx_g12Lexer__CmpEQ = { 1 };
_fx_N12Ast__cmpop_t _fx_g12Lexer__CmpNE = { 2 };
_fx_N12Ast__cmpop_t _fx_g12Lexer__CmpLT = { 3 };
_fx_N12Ast__cmpop_t _fx_g12Lexer__CmpLE = { 4 };
_fx_N12Ast__cmpop_t _fx_g12Lexer__CmpGE = { 5 };
_fx_N12Ast__cmpop_t _fx_g12Lexer__CmpGT = { 6 };
static _fx_N13Ast__binary_t_data_t OpAdd_data_0 = { 1, 1 };
_fx_N13Ast__binary_t _fx_g12Lexer__OpAdd = &OpAdd_data_0;
static _fx_N13Ast__binary_t_data_t OpSub_data_0 = { 1, 2 };
_fx_N13Ast__binary_t _fx_g12Lexer__OpSub = &OpSub_data_0;
static _fx_N13Ast__binary_t_data_t OpMul_data_1 = { 1, 3 };
_fx_N13Ast__binary_t _fx_g12Lexer__OpMul = &OpMul_data_1;
static _fx_N13Ast__binary_t_data_t OpDiv_data_1 = { 1, 4 };
_fx_N13Ast__binary_t _fx_g12Lexer__OpDiv = &OpDiv_data_1;
static _fx_N13Ast__binary_t_data_t OpMod_data_1 = { 1, 6 };
_fx_N13Ast__binary_t _fx_g12Lexer__OpMod = &OpMod_data_1;
static _fx_N13Ast__binary_t_data_t OpShiftLeft_data_0 = { 1, 8 };
_fx_N13Ast__binary_t _fx_g18Lexer__OpShiftLeft = &OpShiftLeft_data_0;
static _fx_N13Ast__binary_t_data_t OpShiftRight_data_0 = { 1, 9 };
_fx_N13Ast__binary_t _fx_g19Lexer__OpShiftRight = &OpShiftRight_data_0;
static _fx_N13Ast__binary_t_data_t OpDotMul_data_0 = { 1, 12 };
_fx_N13Ast__binary_t _fx_g15Lexer__OpDotMul = &OpDotMul_data_0;
static _fx_N13Ast__binary_t_data_t OpDotDiv_data_0 = { 1, 13 };
_fx_N13Ast__binary_t _fx_g15Lexer__OpDotDiv = &OpDotDiv_data_0;
static _fx_N13Ast__binary_t_data_t OpDotMod_data_0 = { 1, 14 };
_fx_N13Ast__binary_t _fx_g15Lexer__OpDotMod = &OpDotMod_data_0;
static _fx_N13Ast__binary_t_data_t OpBitwiseAnd_data_0 = { 1, 16 };
_fx_N13Ast__binary_t _fx_g19Lexer__OpBitwiseAnd = &OpBitwiseAnd_data_0;
static _fx_N13Ast__binary_t_data_t OpBitwiseOr_data_0 = { 1, 18 };
_fx_N13Ast__binary_t _fx_g18Lexer__OpBitwiseOr = &OpBitwiseOr_data_0;
static _fx_N13Ast__binary_t_data_t OpBitwiseXor_data_0 = { 1, 20 };
_fx_N13Ast__binary_t _fx_g19Lexer__OpBitwiseXor = &OpBitwiseXor_data_0;
_fx_N14Lexer__token_t _fx_g11Lexer__APOS = { 4 };
_fx_N14Lexer__token_t _fx_g9Lexer__AS = { 5 };
_fx_N14Lexer__token_t _fx_g9Lexer__AT = { 6 };
_fx_N14Lexer__token_t _fx_g12Lexer__BREAK = { 7 };
_fx_N14Lexer__token_t _fx_g12Lexer__CATCH = { 8 };
_fx_N14Lexer__token_t _fx_g12Lexer__CCODE = { 9 };
_fx_N14Lexer__token_t _fx_g12Lexer__CLASS = { 10 };
_fx_N14Lexer__token_t _fx_g15Lexer__CONTINUE = { 11 };
_fx_N14Lexer__token_t _fx_g9Lexer__DO = { 12 };
_fx_N14Lexer__token_t _fx_g15Lexer__ELLIPSIS = { 14 };
_fx_N14Lexer__token_t _fx_g11Lexer__ELSE = { 15 };
_fx_N14Lexer__token_t _fx_g16Lexer__EXCEPTION = { 16 };
_fx_N14Lexer__token_t _fx_g14Lexer__FINALLY = { 17 };
_fx_N14Lexer__token_t _fx_g11Lexer__FOLD = { 18 };
_fx_N14Lexer__token_t _fx_g11Lexer__FROM = { 20 };
_fx_N14Lexer__token_t _fx_g10Lexer__FUN = { 21 };
_fx_N14Lexer__token_t _fx_g9Lexer__IF = { 22 };
_fx_N14Lexer__token_t _fx_g13Lexer__INLINE = { 24 };
_fx_N14Lexer__token_t _fx_g16Lexer__INTERFACE = { 25 };
_fx_N14Lexer__token_t _fx_g12Lexer__MATCH = { 26 };
_fx_N14Lexer__token_t _fx_g14Lexer__NOTHROW = { 27 };
_fx_N14Lexer__token_t _fx_g15Lexer__OPERATOR = { 28 };
_fx_N14Lexer__token_t _fx_g15Lexer__PARALLEL = { 29 };
_fx_N14Lexer__token_t _fx_g13Lexer__PRAGMA = { 30 };
_fx_N14Lexer__token_t _fx_g14Lexer__PRIVATE = { 31 };
_fx_N14Lexer__token_t _fx_g11Lexer__PURE = { 32 };
_fx_N14Lexer__token_t _fx_g12Lexer__THROW = { 35 };
_fx_N14Lexer__token_t _fx_g10Lexer__TRY = { 36 };
_fx_N14Lexer__token_t _fx_g11Lexer__TYPE = { 37 };
_fx_N14Lexer__token_t _fx_g10Lexer__VAL = { 38 };
_fx_N14Lexer__token_t _fx_g10Lexer__VAR = { 39 };
_fx_N14Lexer__token_t _fx_g11Lexer__WHEN = { 40 };
_fx_N14Lexer__token_t _fx_g11Lexer__WITH = { 41 };
_fx_N14Lexer__token_t _fx_g12Lexer__UNZIP = { 43 };
_fx_N14Lexer__token_t _fx_g24Lexer__STR_INTERP_LPAREN = { 45 };
_fx_N14Lexer__token_t _fx_g13Lexer__RPAREN = { 46 };
_fx_N14Lexer__token_t _fx_g14Lexer__RSQUARE = { 48 };
_fx_N14Lexer__token_t _fx_g13Lexer__LBRACE = { 49 };
_fx_N14Lexer__token_t _fx_g13Lexer__RBRACE = { 50 };
_fx_N14Lexer__token_t _fx_g12Lexer__COMMA = { 51 };
_fx_N14Lexer__token_t _fx_g10Lexer__DOT = { 52 };
_fx_N14Lexer__token_t _fx_g16Lexer__SEMICOLON = { 53 };
_fx_N14Lexer__token_t _fx_g12Lexer__COLON = { 54 };
_fx_N14Lexer__token_t _fx_g10Lexer__BAR = { 55 };
_fx_N14Lexer__token_t _fx_g11Lexer__CONS = { 56 };
_fx_N14Lexer__token_t _fx_g11Lexer__CAST = { 57 };
_fx_N14Lexer__token_t _fx_g17Lexer__BACK_ARROW = { 59 };
_fx_N14Lexer__token_t _fx_g19Lexer__DOUBLE_ARROW = { 60 };
_fx_N14Lexer__token_t _fx_g12Lexer__ARROW = { 61 };
_fx_N14Lexer__token_t _fx_g15Lexer__QUESTION = { 62 };
_fx_N14Lexer__token_t _fx_g10Lexer__EOF = { 63 };
_fx_N14Lexer__token_t _fx_g12Lexer__SLASH = { 67 };
_fx_N14Lexer__token_t _fx_g11Lexer__SYNC = { 68 };
_fx_N14Lexer__token_t _fx_g14Lexer__PERCENT = { 69 };
_fx_N14Lexer__token_t _fx_g12Lexer__POWER = { 70 };
_fx_N14Lexer__token_t _fx_g15Lexer__DOT_STAR = { 71 };
_fx_N14Lexer__token_t _fx_g16Lexer__DOT_SLASH = { 74 };
_fx_N14Lexer__token_t _fx_g18Lexer__DOT_PERCENT = { 75 };
_fx_N14Lexer__token_t _fx_g16Lexer__DOT_POWER = { 76 };
_fx_N14Lexer__token_t _fx_g18Lexer__SHIFT_RIGHT = { 77 };
_fx_N14Lexer__token_t _fx_g17Lexer__SHIFT_LEFT = { 78 };
_fx_N14Lexer__token_t _fx_g18Lexer__BITWISE_AND = { 79 };
_fx_N14Lexer__token_t _fx_g18Lexer__BITWISE_XOR = { 80 };
_fx_N14Lexer__token_t _fx_g17Lexer__BITWISE_OR = { 81 };
_fx_N14Lexer__token_t _fx_g12Lexer__TILDE = { 82 };
_fx_N14Lexer__token_t _fx_g18Lexer__LOGICAL_AND = { 83 };
_fx_N14Lexer__token_t _fx_g17Lexer__LOGICAL_OR = { 84 };
_fx_N14Lexer__token_t _fx_g18Lexer__LOGICAL_NOT = { 85 };
_fx_N14Lexer__token_t _fx_g12Lexer__EQUAL = { 86 };
_fx_N14Lexer__token_t _fx_g16Lexer__DOT_EQUAL = { 87 };
_fx_N14Lexer__token_t _fx_g16Lexer__SPACESHIP = { 89 };
_fx_N14Lexer__token_t _fx_g20Lexer__DOT_SPACESHIP = { 91 };
_fx_N14Lexer__token_t _fx_g11Lexer__SAME = { 93 };
_fx_N14Lexer__token_t _fx_g12Lexer__PP_IF = { 95 };
_fx_N14Lexer__token_t _fx_g15Lexer__PP_IFDEF = { 96 };
_fx_N14Lexer__token_t _fx_g16Lexer__PP_IFNDEF = { 97 };
_fx_N14Lexer__token_t _fx_g14Lexer__PP_ELIF = { 98 };
_fx_N14Lexer__token_t _fx_g14Lexer__PP_ELSE = { 99 };
_fx_N14Lexer__token_t _fx_g15Lexer__PP_ENDIF = { 100 };
_fx_N14Lexer__token_t _fx_g16Lexer__PP_DEFINE = { 101 };
_fx_N14Lexer__token_t _fx_g15Lexer__PP_UNDEF = { 102 };
_fx_N14Lexer__token_t _fx_g15Lexer__PP_ERROR = { 103 };
_fx_N14Lexer__token_t _fx_g17Lexer__PP_WARNING = { 104 };
_fx_Nt10Hashmap__t2ST2N14Lexer__token_ti _fx_g21Lexer__ficus_keywords = 0;
FX_EXTERN_C int _fx_F9make_FailE1S(fx_str_t* arg0, fx_exn_t* fx_result);

FX_EXTERN_C int _fx_M7HashmapFM9makeindexA1i1i(int_ size_0, fx_arr_t* fx_result, void* fx_fv);

FX_EXTERN_C uint64_t _fx_F4hashq1S(fx_str_t* x, void* fx_fv);

FX_EXTERN_C bool _fx_F6__eq__B2SS(fx_str_t* a, fx_str_t* b, void* fx_fv);

FX_EXTERN_C int _fx_F6assertv1B(bool f_0, void* fx_fv);

FX_EXTERN_C int _fx_M3AstFM7lit2strS1N10Ast__lit_t(struct _fx_N10Ast__lit_t* c_0, fx_str_t* fx_result, void* fx_fv);

FX_EXTERN_C int _fx_M6StringFM12decapitalizeS1S(fx_str_t* s, fx_str_t* fx_result, void* fx_fv);

FX_EXTERN_C int _fx_M3AstFM6stringS1N13Ast__binary_t(
   struct _fx_N13Ast__binary_t_data_t* bop_0,
   fx_str_t* fx_result,
   void* fx_fv);

FX_EXTERN_C int _fx_M3AstFM6stringS1N12Ast__cmpop_t(struct _fx_N12Ast__cmpop_t* c_0, fx_str_t* fx_result, void* fx_fv);

FX_EXTERN_C int _fx_M10LexerUtilsFM9getnumberT5ildiC4SiBB(
   fx_str_t* s,
   int_ pos,
   bool just_int,
   bool get_suffix,
   struct _fx_T5ildiC* fx_result,
   void* fx_fv);

FX_EXTERN_C void _fx_M3AstFM9LitStringN10Ast__lit_t1S(fx_str_t* arg0, struct _fx_N10Ast__lit_t* fx_result);

FX_EXTERN_C void _fx_M3AstFM6LitIntN10Ast__lit_t1l(int64_t arg0, struct _fx_N10Ast__lit_t* fx_result);

FX_EXTERN_C void _fx_M3AstFM7LitSIntN10Ast__lit_t2il(int_ arg0, int64_t arg1, struct _fx_N10Ast__lit_t* fx_result);

FX_EXTERN_C void _fx_M3AstFM7LitUIntN10Ast__lit_t2iq(int_ arg0, uint64_t arg1, struct _fx_N10Ast__lit_t* fx_result);

FX_EXTERN_C void _fx_M3AstFM8LitFloatN10Ast__lit_t2id(int_ arg0, double arg1, struct _fx_N10Ast__lit_t* fx_result);

FX_EXTERN_C int _fx_F6stringS1C(char_ c, fx_str_t* fx_result, void* fx_fv);

FX_EXTERN_C int _fx_M10LexerUtilsFM15make_LexerErrorE2Ta2iS(struct _fx_Ta2i* arg0, fx_str_t* arg1, fx_exn_t* fx_result);

FX_EXTERN_C_VAL(int FX_EXN_OverflowError)
FX_EXTERN_C_VAL(int FX_EXN_OutOfRangeError)
FX_EXTERN_C_VAL(int FX_EXN_BadArgError)
FX_EXTERN_C int _fx_F6stringS1E(fx_exn_t* a, fx_str_t* fx_result, void* fx_fv);

FX_EXTERN_C void _fx_M3AstFM7LitBoolN10Ast__lit_t1B(bool arg0, struct _fx_N10Ast__lit_t* fx_result);

FX_EXTERN_C void _fx_M3AstFM7LitCharN10Ast__lit_t1C(char_ arg0, struct _fx_N10Ast__lit_t* fx_result);

FX_EXTERN_C int
   _fx_M5LexerFM7make_fpFPLT2N14Lexer__token_tTa2i08rTa2irirNt6option1R8format_trBrLT2N14Lexer__token_tTa2irirBN20LexerUtils__stream_t(
   struct _fx_rTa2i_data_t* arg0,
   struct _fx_ri_data_t* arg1,
   struct _fx_rNt6option1R8format_t_data_t* arg2,
   struct _fx_rB_data_t* arg3,
   struct _fx_rLT2N14Lexer__token_tTa2i_data_t* arg4,
   struct _fx_ri_data_t* arg5,
   struct _fx_rB_data_t* arg6,
   struct _fx_N20LexerUtils__stream_t_data_t* arg7,
   struct _fx_FPLT2N14Lexer__token_tTa2i0* fx_result);

FX_EXTERN_C int _fx_F6stringS1i(int_ a, fx_str_t* fx_result, void* fx_fv);

FX_EXTERN_C int _fx_M10LexerUtilsFM11skip_spacesT3CiB3N20LexerUtils__stream_tiB(
   struct _fx_N20LexerUtils__stream_t_data_t* s_0,
   int_ pos_0,
   bool allow_nested_0,
   struct _fx_T3CiB* fx_result,
   void* fx_fv);

FX_EXTERN_C int _fx_M10LexerUtilsFM9getstringT4iSiB6SiTa2iCBB(
   fx_str_t* s_0,
   int_ pos_0,
   struct _fx_Ta2i* loc_0,
   char_ term_0,
   bool raw_0,
   bool fmt_0,
   struct _fx_T4iSiB* fx_result,
   void* fx_fv);

FX_EXTERN_C int _fx_M6StringFM4copyS1S(fx_str_t* s, fx_str_t* fx_result, void* fx_fv);

static int _fx_M5LexerFM10nexttokensLT2N14Lexer__token_tTa2i0(
   struct _fx_LT2N14Lexer__token_tTa2i_data_t** fx_result,
   void* fx_fv);

FX_EXTERN_C bool _fx_M4CharFM7isspaceB1C(char_ c, void* fx_fv);

FX_EXTERN_C bool _fx_M4CharFM7isalphaB1C(char_ c, void* fx_fv);

FX_EXTERN_C bool _fx_M4CharFM7isalnumB1C(char_ c, void* fx_fv);

FX_EXTERN_C int _fx_M6StringFM5stripS1S(fx_str_t* s, fx_str_t* fx_result, void* fx_fv);

FX_EXTERN_C int _fx_F3chrC1i(int_ i_0, char_* fx_result, void* fx_fv);

FX_EXTERN_C int _fx_F12parse_formatT2R8format_ti2Si(
   fx_str_t* fmt,
   int_ start,
   struct _fx_T2R8format_ti* fx_result,
   void* fx_fv);

FX_EXTERN_C int _fx_M8FilenameFM8basenameS1S(fx_str_t* path_0, fx_str_t* fx_result, void* fx_fv);

typedef struct {
   int_ rc;
   fx_free_t free_f;
   struct _fx_rTa2i_data_t* t0;
   struct _fx_ri_data_t* t1;
   struct _fx_rNt6option1R8format_t_data_t* t2;
   struct _fx_rB_data_t* t3;
   struct _fx_rLT2N14Lexer__token_tTa2i_data_t* t4;
   struct _fx_ri_data_t* t5;
   struct _fx_rB_data_t* t6;
   struct _fx_N20LexerUtils__stream_t_data_t* t7;
} _fx_M5LexerFM10nexttokensLT2N14Lexer__token_tTa2i0_cldata_t;

FX_EXTERN_C void _fx_free_M5LexerFM10nexttokensLT2N14Lexer__token_tTa2i0(
   _fx_M5LexerFM10nexttokensLT2N14Lexer__token_tTa2i0_cldata_t* dst)
{
   FX_FREE_REF_SIMPLE(&dst->t0);
   FX_FREE_REF_SIMPLE(&dst->t1);
   FX_FREE_REF_SIMPLE(&dst->t2);
   FX_FREE_REF_SIMPLE(&dst->t3);
   _fx_free_rLT2N14Lexer__token_tTa2i(&dst->t4);
   FX_FREE_REF_SIMPLE(&dst->t5);
   FX_FREE_REF_SIMPLE(&dst->t6);
   _fx_free_N20LexerUtils__stream_t(&dst->t7);
   fx_free(dst);
}

FX_EXTERN_C void _fx_M5LexerFM4SomeNt6option1T2N14Lexer__token_ti1T2N14Lexer__token_ti(
   struct _fx_T2N14Lexer__token_ti* arg0,
   struct _fx_Nt6option1T2N14Lexer__token_ti* fx_result)
{
   fx_result->tag = 2;
   _fx_copy_T2N14Lexer__token_ti(arg0, &fx_result->u.Some);
}

FX_EXTERN_C void _fx_M5LexerFM4SomeNt6option1R8format_t1R8format_t(
   struct _fx_R8format_t* arg0,
   struct _fx_Nt6option1R8format_t* fx_result)
{
   fx_result->tag = 2;
   fx_result->u.Some = *arg0;
}

FX_EXTERN_C int_ _fx_M5LexerFM6lengthi1LT2ST2N14Lexer__token_ti(struct _fx_LT2ST2N14Lexer__token_ti_data_t* l, void* fx_fv)
{
   
return fx_list_length(l);

}

FX_EXTERN_C void _fx_M5LexerFM5link2LT2N14Lexer__token_tTa2i2LT2N14Lexer__token_tTa2iLT2N14Lexer__token_tTa2i(
   struct _fx_LT2N14Lexer__token_tTa2i_data_t* l1,
   struct _fx_LT2N14Lexer__token_tTa2i_data_t* l2,
   struct _fx_LT2N14Lexer__token_tTa2i_data_t** fx_result,
   void* fx_fv)
{
   
fx_link_lists(l1, l2, fx_result);

}

FX_EXTERN_C int _fx_M5LexerFM7__add__LT2N14Lexer__token_tTa2i2LT2N14Lexer__token_tTa2iLT2N14Lexer__token_tTa2i(
   struct _fx_LT2N14Lexer__token_tTa2i_data_t* l1_0,
   struct _fx_LT2N14Lexer__token_tTa2i_data_t* l2_0,
   struct _fx_LT2N14Lexer__token_tTa2i_data_t** fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   if (l1_0 == 0) {
      FX_COPY_PTR(l2_0, fx_result);
   }
   else if (l2_0 == 0) {
      FX_COPY_PTR(l1_0, fx_result);
   }
   else {
      _fx_LT2N14Lexer__token_tTa2i v_0 = 0;
      _fx_LT2N14Lexer__token_tTa2i lstend_0 = 0;
      _fx_LT2N14Lexer__token_tTa2i lst_0 = l1_0;
      for (; lst_0; lst_0 = lst_0->tl) {
         _fx_T2N14Lexer__token_tTa2i* x_0 = &lst_0->hd;
         _fx_LT2N14Lexer__token_tTa2i node_0 = 0;
         FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(x_0, 0, false, &node_0), _fx_catch_0);
         FX_LIST_APPEND(v_0, lstend_0, node_0);

      _fx_catch_0: ;
         FX_CHECK_EXN(_fx_catch_1);
      }
      _fx_M5LexerFM5link2LT2N14Lexer__token_tTa2i2LT2N14Lexer__token_tTa2iLT2N14Lexer__token_tTa2i(v_0, l2_0, fx_result, 0);

   _fx_catch_1: ;
      if (v_0) {
         _fx_free_LT2N14Lexer__token_tTa2i(&v_0);
      }
   }
   return fx_status;
}

FX_EXTERN_C void _fx_M5LexerFM5link2LN14Lexer__token_t2LN14Lexer__token_tLN14Lexer__token_t(
   struct _fx_LN14Lexer__token_t_data_t* l1,
   struct _fx_LN14Lexer__token_t_data_t* l2,
   struct _fx_LN14Lexer__token_t_data_t** fx_result,
   void* fx_fv)
{
   
fx_link_lists(l1, l2, fx_result);

}

FX_EXTERN_C int _fx_M5LexerFM7__add__LN14Lexer__token_t2LN14Lexer__token_tLN14Lexer__token_t(
   struct _fx_LN14Lexer__token_t_data_t* l1_0,
   struct _fx_LN14Lexer__token_t_data_t* l2_0,
   struct _fx_LN14Lexer__token_t_data_t** fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   if (l1_0 == 0) {
      FX_COPY_PTR(l2_0, fx_result);
   }
   else if (l2_0 == 0) {
      FX_COPY_PTR(l1_0, fx_result);
   }
   else {
      _fx_LN14Lexer__token_t v_0 = 0;
      _fx_LN14Lexer__token_t lstend_0 = 0;
      _fx_LN14Lexer__token_t lst_0 = l1_0;
      for (; lst_0; lst_0 = lst_0->tl) {
         _fx_N14Lexer__token_t* x_0 = &lst_0->hd;
         _fx_LN14Lexer__token_t node_0 = 0;
         FX_CALL(_fx_cons_LN14Lexer__token_t(x_0, 0, false, &node_0), _fx_catch_0);
         FX_LIST_APPEND(v_0, lstend_0, node_0);

      _fx_catch_0: ;
         FX_CHECK_EXN(_fx_catch_1);
      }
      _fx_M5LexerFM5link2LN14Lexer__token_t2LN14Lexer__token_tLN14Lexer__token_t(v_0, l2_0, fx_result, 0);

   _fx_catch_1: ;
      if (v_0) {
         _fx_free_LN14Lexer__token_t(&v_0);
      }
   }
   return fx_status;
}

FX_EXTERN_C int _fx_M5LexerFM6stringS1S(fx_str_t* a_0, fx_str_t* fx_result, void* fx_fv)
{
   int fx_status = 0;
   fx_copy_str(a_0, fx_result);
   return fx_status;
}

FX_EXTERN_C int _fx_M5LexerFM3mini2ii(int_ a_0, int_ b_0, int_* fx_result, void* fx_fv)
{
   int fx_status = 0;
   *fx_result = fx_mini(a_0, b_0);
   return fx_status;
}

FX_EXTERN_C int _fx_M5LexerFM6lengthi1S(fx_str_t* s_0, int_* fx_result, void* fx_fv)
{
   int fx_status = 0;
   *fx_result = FX_STR_LENGTH(*s_0);
   return fx_status;
}

FX_EXTERN_C int
   _fx_M5LexerFM1tNt10Hashmap__t2ST2N14Lexer__token_ti6Rt20Hashmap__hashentry_t2ST2N14Lexer__token_tiiiiA1iA1Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti(
   struct _fx_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti* arg0,
   int_ arg1,
   int_ arg2,
   int_ arg3,
   fx_arr_t* arg4,
   fx_arr_t* arg5,
   struct _fx_Nt10Hashmap__t2ST2N14Lexer__token_ti_data_t** fx_result)
{
   FX_MAKE_RECURSIVE_VARIANT_IMPL_START(_fx_Nt10Hashmap__t2ST2N14Lexer__token_ti);
   _fx_copy_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti(arg0, &v->u.t.t0);
   v->u.t.t1 = arg1;
   v->u.t.t2 = arg2;
   v->u.t.t3 = arg3;
   fx_copy_arr(arg4, &v->u.t.t4);
   fx_copy_arr(arg5, &v->u.t.t5);
   return 0;
}

FX_EXTERN_C int
   _fx_M5LexerFM9add_fast_i4iA1iA1Rt20Hashmap__hashentry_t2ST2N14Lexer__token_tiRt20Hashmap__hashentry_t2ST2N14Lexer__token_ti(
   int_ tabsz_0,
   fx_arr_t* ht_index_0,
   fx_arr_t* ht_table_0,
   struct _fx_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti* entry_0,
   int_* fx_result,
   void* fx_fv)
{
   fx_exn_t v_0 = {0};
   int fx_status = 0;
   int_ idxsz_0 = FX_ARR_SIZE(*ht_index_0, 0);
   uint64_t hv_0 = entry_0->hv;
   uint64_t perturb_0 = hv_0;
   int_ j_0 = (int_)hv_0 & (idxsz_0 - 1);
   bool found_free_slot_0 = false;
   int_ v_1 = idxsz_0 + 14;
   for (int_ i_0 = 0; i_0 < v_1; i_0++) {
      FX_CHKIDX(FX_CHKIDX1(*ht_index_0, 0, j_0), _fx_catch_0);
      int_ tidx_0 = *FX_PTR_1D(int_, *ht_index_0, j_0);
      if (tidx_0 == 0) {
         FX_CHKIDX(FX_CHKIDX1(*ht_index_0, 0, j_0), _fx_catch_0);
         *FX_PTR_1D(int_, *ht_index_0, j_0) = tabsz_0 + 2;
         FX_CHKIDX(FX_CHKIDX1(*ht_table_0, 0, tabsz_0), _fx_catch_0);
         _fx_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti* v_2 =
            FX_PTR_1D(_fx_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti, *ht_table_0, tabsz_0);
         _fx_free_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti(v_2);
         _fx_copy_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti(entry_0, v_2);
         found_free_slot_0 = true;
         FX_BREAK(_fx_catch_0);
      }
      perturb_0 = perturb_0 >> 5;
      j_0 = (int_)((uint64_t)(j_0 * 5 + 1) + perturb_0) & (idxsz_0 - 1);

   _fx_catch_0: ;
      FX_CHECK_BREAK();
      FX_CHECK_EXN(_fx_cleanup);
   }
   if (!found_free_slot_0) {
      fx_str_t slit_0 = FX_MAKE_STR("cannot insert element (full Hashtable?!)");
      FX_CALL(_fx_F9make_FailE1S(&slit_0, &v_0), _fx_cleanup);
      FX_THROW(&v_0, true, _fx_cleanup);
   }
   *fx_result = tabsz_0 + 1;

_fx_cleanup: ;
   fx_free_exn(&v_0);
   return fx_status;
}

FX_EXTERN_C int _fx_M5LexerFM4growv2Nt10Hashmap__t2ST2N14Lexer__token_tii(
   struct _fx_Nt10Hashmap__t2ST2N14Lexer__token_ti_data_t* self_0,
   int_ new_size_0,
   void* fx_fv)
{
   fx_arr_t ht_table_0 = {0};
   _fx_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti v_0 = {0};
   fx_arr_t new_ht_table_0 = {0};
   fx_arr_t new_ht_index_0 = {0};
   int fx_status = 0;
   fx_copy_arr(&self_0->u.t.t5, &ht_table_0);
   _fx_copy_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti(&self_0->u.t.t0, &v_0);
   _fx_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti* dstptr_0 = 0;
   {
      const int_ shape_0[] = { new_size_0 };
      FX_CALL(
         fx_make_arr(1, shape_0, sizeof(_fx_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti),
            (fx_free_t)_fx_free_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti,
            (fx_copy_t)_fx_copy_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti, 0, &new_ht_table_0), _fx_cleanup);
   }
   dstptr_0 = (_fx_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti*)new_ht_table_0.data;
   for (int_ i_0 = 0; i_0 < new_size_0; i_0++, dstptr_0++) {
      _fx_copy_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti(&v_0, dstptr_0);
   }
   FX_CALL(_fx_M7HashmapFM9makeindexA1i1i(new_size_0 * 2, &new_ht_index_0, 0), _fx_cleanup);
   int_ tabsz_0 = 0;
   int_ v_1 = self_0->u.t.t2;
   for (int_ j_0 = 0; j_0 < v_1; j_0++) {
      _fx_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti v_2 = {0};
      FX_CHKIDX(FX_CHKIDX1(ht_table_0, 0, j_0), _fx_catch_0);
      if (FX_PTR_1D(_fx_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti, ht_table_0, j_0)->hv < 9223372036854775808ULL) {
         FX_CHKIDX(FX_CHKIDX1(ht_table_0, 0, j_0), _fx_catch_0);
         _fx_copy_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti(
            FX_PTR_1D(_fx_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti, ht_table_0, j_0), &v_2);
         int_ v_3;
         FX_CALL(
            _fx_M5LexerFM9add_fast_i4iA1iA1Rt20Hashmap__hashentry_t2ST2N14Lexer__token_tiRt20Hashmap__hashentry_t2ST2N14Lexer__token_ti(
               tabsz_0, &new_ht_index_0, &new_ht_table_0, &v_2, &v_3, 0), _fx_catch_0);
         tabsz_0 = v_3;
      }

   _fx_catch_0: ;
      _fx_free_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti(&v_2);
      FX_CHECK_EXN(_fx_cleanup);
   }
   fx_arr_t* v_4 = &self_0->u.t.t4;
   FX_FREE_ARR(v_4);
   fx_copy_arr(&new_ht_index_0, v_4);
   fx_arr_t* v_5 = &self_0->u.t.t5;
   FX_FREE_ARR(v_5);
   fx_copy_arr(&new_ht_table_0, v_5);
   self_0->u.t.t2 = tabsz_0;
   self_0->u.t.t3 = 0;

_fx_cleanup: ;
   FX_FREE_ARR(&ht_table_0);
   _fx_free_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti(&v_0);
   FX_FREE_ARR(&new_ht_table_0);
   FX_FREE_ARR(&new_ht_index_0);
   return fx_status;
}

FX_EXTERN_C int _fx_M5LexerFM9find_idx_Ta2i2Nt10Hashmap__t2ST2N14Lexer__token_tiS(
   struct _fx_Nt10Hashmap__t2ST2N14Lexer__token_ti_data_t* self_0,
   fx_str_t* k_0,
   struct _fx_Ta2i* fx_result,
   void* fx_fv)
{
   fx_arr_t v_0 = {0};
   int fx_status = 0;
   uint64_t v_1 = _fx_F4hashq1S(k_0, 0);
   uint64_t hv_0 = v_1 & 9223372036854775807ULL;
   fx_copy_arr(&self_0->u.t.t4, &v_0);
   int_ idxsz_0 = FX_ARR_SIZE(v_0, 0);
   uint64_t perturb_0 = hv_0;
   int_ found_0 = -1;
   int_ j_0 = (int_)hv_0 & (idxsz_0 - 1);
   int_ v_2 = idxsz_0 + 14;
   for (int_ i_0 = 0; i_0 < v_2; i_0++) {
      _fx_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti entry_0 = {0};
      fx_str_t v_3 = {0};
      FX_CHKIDX(FX_CHKIDX1(self_0->u.t.t4, 0, j_0), _fx_catch_0);
      int_ tidx_0 = *FX_PTR_1D(int_, self_0->u.t.t4, j_0);
      if (tidx_0 >= 2) {
         int_ v_4 = tidx_0 - 2;
         FX_CHKIDX(FX_CHKIDX1(self_0->u.t.t5, 0, v_4), _fx_catch_0);
         _fx_copy_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti(
            FX_PTR_1D(_fx_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti, self_0->u.t.t5, v_4), &entry_0);
         bool v_5;
         if (entry_0.hv == hv_0) {
            fx_copy_str(&entry_0.key, &v_3); v_5 = _fx_F6__eq__B2SS(&v_3, k_0, 0);
         }
         else {
            v_5 = false;
         }
         if (v_5) {
            found_0 = tidx_0 - 2; FX_BREAK(_fx_catch_0);
         }
      }
      else if (tidx_0 == 0) {
         FX_BREAK(_fx_catch_0);
      }
      perturb_0 = perturb_0 >> 5;
      j_0 = (int_)((uint64_t)(j_0 * 5 + 1) + perturb_0) & (idxsz_0 - 1);

   _fx_catch_0: ;
      FX_FREE_STR(&v_3);
      _fx_free_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti(&entry_0);
      FX_CHECK_BREAK();
      FX_CHECK_EXN(_fx_cleanup);
   }
   _fx_Ta2i tup_0 = { j_0, found_0 };
   *fx_result = tup_0;

_fx_cleanup: ;
   FX_FREE_ARR(&v_0);
   return fx_status;
}

FX_EXTERN_C int _fx_M5LexerFM8find_optNt6option1T2N14Lexer__token_ti2Nt10Hashmap__t2ST2N14Lexer__token_tiS(
   struct _fx_Nt10Hashmap__t2ST2N14Lexer__token_ti_data_t* self_0,
   fx_str_t* k_0,
   struct _fx_Nt6option1T2N14Lexer__token_ti* fx_result,
   void* fx_fv)
{
   _fx_T2N14Lexer__token_ti v_0 = {0};
   int fx_status = 0;
   _fx_Ta2i v_1;
   FX_CALL(_fx_M5LexerFM9find_idx_Ta2i2Nt10Hashmap__t2ST2N14Lexer__token_tiS(self_0, k_0, &v_1, 0), _fx_cleanup);
   int_ j_0 = v_1.t1;
   if (j_0 >= 0) {
      FX_CHKIDX(FX_CHKIDX1(self_0->u.t.t5, 0, j_0), _fx_cleanup);
      _fx_copy_T2N14Lexer__token_ti(&FX_PTR_1D(_fx_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti, self_0->u.t.t5, j_0)->data,
         &v_0);
      _fx_M5LexerFM4SomeNt6option1T2N14Lexer__token_ti1T2N14Lexer__token_ti(&v_0, fx_result);
   }
   else {
      _fx_copy_Nt6option1T2N14Lexer__token_ti(&_fx_g11Lexer__None, fx_result);
   }

_fx_cleanup: ;
   _fx_free_T2N14Lexer__token_ti(&v_0);
   return fx_status;
}

FX_EXTERN_C int _fx_M5LexerFM18find_idx_or_inserti2Nt10Hashmap__t2ST2N14Lexer__token_tiS(
   struct _fx_Nt10Hashmap__t2ST2N14Lexer__token_ti_data_t* self_0,
   fx_str_t* k_0,
   int_* fx_result,
   void* fx_fv)
{
   fx_arr_t v_0 = {0};
   fx_arr_t v_1 = {0};
   _fx_T2N14Lexer__token_ti v_2 = {0};
   _fx_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti v_3 = {0};
   fx_exn_t v_4 = {0};
   int fx_status = 0;
   uint64_t v_5 = _fx_F4hashq1S(k_0, 0);
   uint64_t hv_0 = v_5 & 9223372036854775807ULL;
   fx_copy_arr(&self_0->u.t.t4, &v_0);
   int_ idxsz_0 = FX_ARR_SIZE(v_0, 0);
   if (self_0->u.t.t1 + 1 > idxsz_0 >> 1) {
      while (idxsz_0 < (self_0->u.t.t1 + 1) * 2) {
         idxsz_0 = idxsz_0 * 2;
      }
      FX_CALL(_fx_M5LexerFM4growv2Nt10Hashmap__t2ST2N14Lexer__token_tii(self_0, fx_maxi(idxsz_0 / 2, self_0->u.t.t1 + 1), 0),
         _fx_cleanup);
   }
   uint64_t perturb_0 = hv_0;
   int_ found_0 = -1;
   int_ insert_idx_0 = -1;
   int_ j_0 = (int_)hv_0 & (idxsz_0 - 1);
   int_ v_6 = idxsz_0 + 14;
   for (int_ i_0 = 0; i_0 < v_6; i_0++) {
      _fx_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti entry_0 = {0};
      fx_str_t v_7 = {0};
      FX_CHKIDX(FX_CHKIDX1(self_0->u.t.t4, 0, j_0), _fx_catch_0);
      int_ tidx_0 = *FX_PTR_1D(int_, self_0->u.t.t4, j_0);
      if (tidx_0 >= 2) {
         int_ v_8 = tidx_0 - 2;
         FX_CHKIDX(FX_CHKIDX1(self_0->u.t.t5, 0, v_8), _fx_catch_0);
         _fx_copy_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti(
            FX_PTR_1D(_fx_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti, self_0->u.t.t5, v_8), &entry_0);
         bool v_9;
         if (entry_0.hv == hv_0) {
            fx_copy_str(&entry_0.key, &v_7); v_9 = _fx_F6__eq__B2SS(&v_7, k_0, 0);
         }
         else {
            v_9 = false;
         }
         if (v_9) {
            found_0 = tidx_0 - 2; FX_BREAK(_fx_catch_0);
         }
      }
      else if (tidx_0 == 0) {
         if (insert_idx_0 < 0) {
            insert_idx_0 = j_0;
         }
         FX_BREAK(_fx_catch_0);
      }
      else {
         bool t_0;
         if (tidx_0 == 1) {
            t_0 = insert_idx_0 < 0;
         }
         else {
            t_0 = false;
         }
         if (t_0) {
            insert_idx_0 = j_0;
         }
      }
      perturb_0 = perturb_0 >> 5;
      j_0 = (int_)((uint64_t)(j_0 * 5 + 1) + perturb_0) & (idxsz_0 - 1);

   _fx_catch_0: ;
      FX_FREE_STR(&v_7);
      _fx_free_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti(&entry_0);
      FX_CHECK_BREAK();
      FX_CHECK_EXN(_fx_cleanup);
   }
   if (found_0 >= 0) {
      bool t_1;
      if (insert_idx_0 >= 0) {
         t_1 = insert_idx_0 != j_0;
      }
      else {
         t_1 = false;
      }
      if (t_1) {
         FX_CHKIDX(FX_CHKIDX1(self_0->u.t.t4, 0, insert_idx_0), _fx_cleanup);
         *FX_PTR_1D(int_, self_0->u.t.t4, insert_idx_0) = found_0 + 2;
         FX_CHKIDX(FX_CHKIDX1(self_0->u.t.t4, 0, j_0), _fx_cleanup);
         *FX_PTR_1D(int_, self_0->u.t.t4, j_0) = 1;
      }
   }
   else if (insert_idx_0 >= 0) {
      found_0 = self_0->u.t.t3 - 1;
      if (found_0 >= 0) {
         FX_CHKIDX(FX_CHKIDX1(self_0->u.t.t5, 0, found_0), _fx_cleanup);
         self_0->u.t.t3 =
            (int_)
               (FX_PTR_1D(_fx_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti, self_0->u.t.t5, found_0)->hv &
                  9223372036854775807ULL);
      }
      else {
         found_0 = self_0->u.t.t2;
         self_0->u.t.t2 = self_0->u.t.t2 + 1;
         fx_copy_arr(&self_0->u.t.t5, &v_1);
         FX_CALL(_fx_F6assertv1B(found_0 < FX_ARR_SIZE(v_1, 0), 0), _fx_cleanup);
      }
      _fx_copy_T2N14Lexer__token_ti(&self_0->u.t.t0.data, &v_2);
      _fx_make_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti(hv_0, k_0, &v_2, &v_3);
      FX_CHKIDX(FX_CHKIDX1(self_0->u.t.t5, 0, found_0), _fx_cleanup);
      _fx_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti* v_10 =
         FX_PTR_1D(_fx_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti, self_0->u.t.t5, found_0);
      _fx_free_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti(v_10);
      _fx_copy_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti(&v_3, v_10);
      FX_CHKIDX(FX_CHKIDX1(self_0->u.t.t4, 0, insert_idx_0), _fx_cleanup);
      *FX_PTR_1D(int_, self_0->u.t.t4, insert_idx_0) = found_0 + 2;
      self_0->u.t.t1 = self_0->u.t.t1 + 1;
   }
   else {
      fx_str_t slit_0 = FX_MAKE_STR("cannot insert element (full Hashtable?!)");
      FX_CALL(_fx_F9make_FailE1S(&slit_0, &v_4), _fx_cleanup);
      FX_THROW(&v_4, true, _fx_cleanup);
   }
   *fx_result = found_0;

_fx_cleanup: ;
   FX_FREE_ARR(&v_0);
   FX_FREE_ARR(&v_1);
   _fx_free_T2N14Lexer__token_ti(&v_2);
   _fx_free_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti(&v_3);
   fx_free_exn(&v_4);
   return fx_status;
}

FX_EXTERN_C int _fx_M5LexerFM9from_listNt10Hashmap__t2ST2N14Lexer__token_ti3ST2N14Lexer__token_tiLT2ST2N14Lexer__token_ti(
   fx_str_t* k0_0,
   struct _fx_T2N14Lexer__token_ti* d0_0,
   struct _fx_LT2ST2N14Lexer__token_ti_data_t* data_0,
   struct _fx_Nt10Hashmap__t2ST2N14Lexer__token_ti_data_t** fx_result,
   void* fx_fv)
{
   _fx_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti entry0_0 = {0};
   fx_arr_t v_0 = {0};
   fx_arr_t v_1 = {0};
   _fx_Nt10Hashmap__t2ST2N14Lexer__token_ti ht_0 = 0;
   fx_arr_t v_2 = {0};
   int fx_status = 0;
   int_ v_3 = _fx_M5LexerFM6lengthi1LT2ST2N14Lexer__token_ti(data_0, 0);
   int_ size_0 = 8;
   while (size_0 < v_3) {
      size_0 = size_0 * 2;
   }
   int_ idxsize_0 = size_0 * 2;
   _fx_make_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti(0ULL, k0_0, d0_0, &entry0_0);
   FX_CALL(_fx_M7HashmapFM9makeindexA1i1i(idxsize_0, &v_0, 0), _fx_cleanup);
   _fx_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti* dstptr_0 = 0;
   int_ n_0 = size_0;
   {
      const int_ shape_0[] = { n_0 };
      FX_CALL(
         fx_make_arr(1, shape_0, sizeof(_fx_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti),
            (fx_free_t)_fx_free_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti,
            (fx_copy_t)_fx_copy_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti, 0, &v_1), _fx_cleanup);
   }
   dstptr_0 = (_fx_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti*)v_1.data;
   for (int_ i_0 = 0; i_0 < n_0; i_0++, dstptr_0++) {
      _fx_copy_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti(&entry0_0, dstptr_0);
   }
   FX_CALL(
      _fx_M5LexerFM1tNt10Hashmap__t2ST2N14Lexer__token_ti6Rt20Hashmap__hashentry_t2ST2N14Lexer__token_tiiiiA1iA1Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti(
         &entry0_0, 0, 0, 0, &v_0, &v_1, &ht_0), _fx_cleanup);
   int_ v_4 = _fx_M5LexerFM6lengthi1LT2ST2N14Lexer__token_ti(data_0, 0);
   int_ datasz_0 = ht_0->u.t.t1 + v_4;
   fx_copy_arr(&ht_0->u.t.t5, &v_2);
   int_ curr_size_0 = FX_ARR_SIZE(v_2, 0);
   int_ new_size_0 = curr_size_0;
   while (new_size_0 < datasz_0) {
      new_size_0 = new_size_0 * 2;
   }
   if (new_size_0 > curr_size_0) {
      FX_CALL(_fx_M5LexerFM4growv2Nt10Hashmap__t2ST2N14Lexer__token_tii(ht_0, new_size_0, 0), _fx_cleanup);
   }
   _fx_LT2ST2N14Lexer__token_ti lst_0 = data_0;
   for (; lst_0; lst_0 = lst_0->tl) {
      fx_str_t k_0 = {0};
      _fx_T2N14Lexer__token_ti d_0 = {0};
      _fx_T2ST2N14Lexer__token_ti* __pat___0 = &lst_0->hd;
      fx_copy_str(&__pat___0->t0, &k_0);
      _fx_copy_T2N14Lexer__token_ti(&__pat___0->t1, &d_0);
      int_ idx_0;
      FX_CALL(_fx_M5LexerFM18find_idx_or_inserti2Nt10Hashmap__t2ST2N14Lexer__token_tiS(ht_0, &k_0, &idx_0, 0), _fx_catch_0);
      FX_CHKIDX(FX_CHKIDX1(ht_0->u.t.t5, 0, idx_0), _fx_catch_0);
      _fx_T2N14Lexer__token_ti* v_5 = &FX_PTR_1D(_fx_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti, ht_0->u.t.t5, idx_0)->data;
      _fx_free_T2N14Lexer__token_ti(v_5);
      _fx_copy_T2N14Lexer__token_ti(&d_0, v_5);

   _fx_catch_0: ;
      _fx_free_T2N14Lexer__token_ti(&d_0);
      FX_FREE_STR(&k_0);
      FX_CHECK_EXN(_fx_cleanup);
   }
   FX_COPY_PTR(ht_0, fx_result);

_fx_cleanup: ;
   _fx_free_Rt20Hashmap__hashentry_t2ST2N14Lexer__token_ti(&entry0_0);
   FX_FREE_ARR(&v_0);
   FX_FREE_ARR(&v_1);
   if (ht_0) {
      _fx_free_Nt10Hashmap__t2ST2N14Lexer__token_ti(&ht_0);
   }
   FX_FREE_ARR(&v_2);
   return fx_status;
}

FX_EXTERN_C void _fx_M5LexerFM7LITERALN14Lexer__token_t1N10Ast__lit_t(
   struct _fx_N10Ast__lit_t* arg0,
   struct _fx_N14Lexer__token_t* fx_result)
{
   fx_result->tag = 1;
   _fx_copy_N10Ast__lit_t(arg0, &fx_result->u.LITERAL);
}

FX_EXTERN_C void _fx_M5LexerFM5IDENTN14Lexer__token_t2BS(bool arg0, fx_str_t* arg1, struct _fx_N14Lexer__token_t* fx_result)
{
   fx_result->tag = 2;
   fx_result->u.IDENT.t0 = arg0;
   fx_copy_str(arg1, &fx_result->u.IDENT.t1);
}

FX_EXTERN_C void _fx_M5LexerFM5TYVARN14Lexer__token_t1S(fx_str_t* arg0, struct _fx_N14Lexer__token_t* fx_result)
{
   fx_result->tag = 3;
   fx_copy_str(arg0, &fx_result->u.TYVAR);
}

FX_EXTERN_C void _fx_M5LexerFM4DATAN14Lexer__token_t1S(fx_str_t* arg0, struct _fx_N14Lexer__token_t* fx_result)
{
   fx_result->tag = 13;
   fx_copy_str(arg0, &fx_result->u.DATA);
}

FX_EXTERN_C void _fx_M5LexerFM3FORN14Lexer__token_t1B(bool arg0, struct _fx_N14Lexer__token_t* fx_result)
{
   fx_result->tag = 19;
   fx_result->u.FOR = arg0;
}

FX_EXTERN_C void _fx_M5LexerFM6IMPORTN14Lexer__token_t1B(bool arg0, struct _fx_N14Lexer__token_t* fx_result)
{
   fx_result->tag = 23;
   fx_result->u.IMPORT = arg0;
}

FX_EXTERN_C void _fx_M5LexerFM3REFN14Lexer__token_t1B(bool arg0, struct _fx_N14Lexer__token_t* fx_result)
{
   fx_result->tag = 33;
   fx_result->u.REF = arg0;
}

FX_EXTERN_C void _fx_M5LexerFM6RETURNN14Lexer__token_t1B(bool arg0, struct _fx_N14Lexer__token_t* fx_result)
{
   fx_result->tag = 34;
   fx_result->u.RETURN = arg0;
}

FX_EXTERN_C void _fx_M5LexerFM5WHILEN14Lexer__token_t1B(bool arg0, struct _fx_N14Lexer__token_t* fx_result)
{
   fx_result->tag = 42;
   fx_result->u.WHILE = arg0;
}

FX_EXTERN_C void _fx_M5LexerFM6LPARENN14Lexer__token_t1B(bool arg0, struct _fx_N14Lexer__token_t* fx_result)
{
   fx_result->tag = 44;
   fx_result->u.LPAREN = arg0;
}

FX_EXTERN_C void _fx_M5LexerFM7LSQUAREN14Lexer__token_t1B(bool arg0, struct _fx_N14Lexer__token_t* fx_result)
{
   fx_result->tag = 47;
   fx_result->u.LSQUARE = arg0;
}

FX_EXTERN_C void _fx_M5LexerFM9BACKSLASHN14Lexer__token_t1B(bool arg0, struct _fx_N14Lexer__token_t* fx_result)
{
   fx_result->tag = 58;
   fx_result->u.BACKSLASH = arg0;
}

FX_EXTERN_C void _fx_M5LexerFM5MINUSN14Lexer__token_t1B(bool arg0, struct _fx_N14Lexer__token_t* fx_result)
{
   fx_result->tag = 64;
   fx_result->u.MINUS = arg0;
}

FX_EXTERN_C void _fx_M5LexerFM4PLUSN14Lexer__token_t1B(bool arg0, struct _fx_N14Lexer__token_t* fx_result)
{
   fx_result->tag = 65;
   fx_result->u.PLUS = arg0;
}

FX_EXTERN_C void _fx_M5LexerFM4STARN14Lexer__token_t1B(bool arg0, struct _fx_N14Lexer__token_t* fx_result)
{
   fx_result->tag = 66;
   fx_result->u.STAR = arg0;
}

FX_EXTERN_C void _fx_M5LexerFM8DOT_PLUSN14Lexer__token_t1B(bool arg0, struct _fx_N14Lexer__token_t* fx_result)
{
   fx_result->tag = 72;
   fx_result->u.DOT_PLUS = arg0;
}

FX_EXTERN_C void _fx_M5LexerFM9DOT_MINUSN14Lexer__token_t1B(bool arg0, struct _fx_N14Lexer__token_t* fx_result)
{
   fx_result->tag = 73;
   fx_result->u.DOT_MINUS = arg0;
}

FX_EXTERN_C void _fx_M5LexerFM9AUG_BINOPN14Lexer__token_t1N13Ast__binary_t(
   struct _fx_N13Ast__binary_t_data_t* arg0,
   struct _fx_N14Lexer__token_t* fx_result)
{
   fx_result->tag = 88;
   FX_COPY_PTR(arg0, &fx_result->u.AUG_BINOP);
}

FX_EXTERN_C void _fx_M5LexerFM3CMPN14Lexer__token_t1N12Ast__cmpop_t(
   struct _fx_N12Ast__cmpop_t* arg0,
   struct _fx_N14Lexer__token_t* fx_result)
{
   fx_result->tag = 90;
   fx_result->u.CMP = *arg0;
}

FX_EXTERN_C void _fx_M5LexerFM7DOT_CMPN14Lexer__token_t1N12Ast__cmpop_t(
   struct _fx_N12Ast__cmpop_t* arg0,
   struct _fx_N14Lexer__token_t* fx_result)
{
   fx_result->tag = 92;
   fx_result->u.DOT_CMP = *arg0;
}

FX_EXTERN_C void _fx_M5LexerFM8RESERVEDN14Lexer__token_t1S(fx_str_t* arg0, struct _fx_N14Lexer__token_t* fx_result)
{
   fx_result->tag = 94;
   fx_copy_str(arg0, &fx_result->u.RESERVED);
}

FX_EXTERN_C int _fx_M5LexerFM7tok2strTa2S1N14Lexer__token_t(
   struct _fx_N14Lexer__token_t* t_0,
   struct _fx_Ta2S* fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   int tag_0 = t_0->tag;
   if (tag_0 == 1) {
      fx_str_t v_0 = {0};
      fx_str_t v_1 = {0};
      fx_str_t v_2 = {0};
      _fx_N10Ast__lit_t* l_0 = &t_0->u.LITERAL;
      FX_CALL(_fx_M3AstFM7lit2strS1N10Ast__lit_t(l_0, &v_0, 0), _fx_catch_0);
      fx_str_t slit_0 = FX_MAKE_STR("LITERAL(");
      fx_str_t slit_1 = FX_MAKE_STR(")");
      {
         const fx_str_t strs_0[] = { slit_0, v_0, slit_1 };
         FX_CALL(fx_strjoin(0, 0, 0, strs_0, 3, &v_1), _fx_catch_0);
      }
      FX_CALL(_fx_M3AstFM7lit2strS1N10Ast__lit_t(l_0, &v_2, 0), _fx_catch_0);
      _fx_make_Ta2S(&v_1, &v_2, fx_result);

   _fx_catch_0: ;
      FX_FREE_STR(&v_2);
      FX_FREE_STR(&v_1);
      FX_FREE_STR(&v_0);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 2) {
      fx_str_t v_3 = {0};
      fx_str_t v_4 = {0};
      _fx_T2BS* vcase_0 = &t_0->u.IDENT;
      fx_str_t* s_0 = &vcase_0->t1;
      fx_str_t slit_2 = FX_MAKE_STR("IDENT(");
      fx_str_t slit_3 = FX_MAKE_STR(")");
      {
         const fx_str_t strs_1[] = { slit_2, *s_0, slit_3 };
         FX_CALL(fx_strjoin(0, 0, 0, strs_1, 3, &v_3), _fx_catch_1);
      }
      if (vcase_0->t0) {
         fx_copy_str(&v_3, &v_4);
      }
      else {
         FX_CALL(_fx_M6StringFM12decapitalizeS1S(&v_3, &v_4, 0), _fx_catch_1);
      }
      _fx_make_Ta2S(&v_4, s_0, fx_result);

   _fx_catch_1: ;
      FX_FREE_STR(&v_4);
      FX_FREE_STR(&v_3);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 3) {
      fx_str_t v_5 = {0};
      fx_str_t* s_1 = &t_0->u.TYVAR;
      fx_str_t slit_4 = FX_MAKE_STR("TYVAR(");
      fx_str_t slit_5 = FX_MAKE_STR(")");
      {
         const fx_str_t strs_2[] = { slit_4, *s_1, slit_5 };
         FX_CALL(fx_strjoin(0, 0, 0, strs_2, 3, &v_5), _fx_catch_2);
      }
      _fx_make_Ta2S(&v_5, s_1, fx_result);

   _fx_catch_2: ;
      FX_FREE_STR(&v_5);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 4) {
      fx_str_t slit_6 = FX_MAKE_STR("APOS");
      fx_str_t slit_7 = FX_MAKE_STR("\'");
      _fx_make_Ta2S(&slit_6, &slit_7, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 5) {
      fx_str_t slit_8 = FX_MAKE_STR("AS");
      fx_str_t slit_9 = FX_MAKE_STR("as");
      _fx_make_Ta2S(&slit_8, &slit_9, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 6) {
      fx_str_t slit_10 = FX_MAKE_STR("AT");
      fx_str_t slit_11 = FX_MAKE_STR("@");
      _fx_make_Ta2S(&slit_10, &slit_11, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 7) {
      fx_str_t slit_12 = FX_MAKE_STR("BREAK");
      fx_str_t slit_13 = FX_MAKE_STR("break");
      _fx_make_Ta2S(&slit_12, &slit_13, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 8) {
      fx_str_t slit_14 = FX_MAKE_STR("CATCH");
      fx_str_t slit_15 = FX_MAKE_STR("catch");
      _fx_make_Ta2S(&slit_14, &slit_15, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 9) {
      fx_str_t slit_16 = FX_MAKE_STR("CCODE");
      fx_str_t slit_17 = FX_MAKE_STR("@ccode");
      _fx_make_Ta2S(&slit_16, &slit_17, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 10) {
      fx_str_t slit_18 = FX_MAKE_STR("CLASS");
      fx_str_t slit_19 = FX_MAKE_STR("class");
      _fx_make_Ta2S(&slit_18, &slit_19, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 11) {
      fx_str_t slit_20 = FX_MAKE_STR("CONTINUE");
      fx_str_t slit_21 = FX_MAKE_STR("continue");
      _fx_make_Ta2S(&slit_20, &slit_21, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 13) {
      fx_str_t slit_22 = FX_MAKE_STR("DATA(kind)");
      fx_str_t slit_23 = FX_MAKE_STR("@data(kind)");
      _fx_make_Ta2S(&slit_22, &slit_23, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 12) {
      fx_str_t slit_24 = FX_MAKE_STR("DO");
      fx_str_t slit_25 = FX_MAKE_STR("do");
      _fx_make_Ta2S(&slit_24, &slit_25, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 14) {
      fx_str_t slit_26 = FX_MAKE_STR("ELLIPSIS");
      fx_str_t slit_27 = FX_MAKE_STR("...");
      _fx_make_Ta2S(&slit_26, &slit_27, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 15) {
      fx_str_t slit_28 = FX_MAKE_STR("ELSE");
      fx_str_t slit_29 = FX_MAKE_STR("else");
      _fx_make_Ta2S(&slit_28, &slit_29, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 16) {
      fx_str_t slit_30 = FX_MAKE_STR("EXCEPTION");
      fx_str_t slit_31 = FX_MAKE_STR("exception");
      _fx_make_Ta2S(&slit_30, &slit_31, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 17) {
      fx_str_t slit_32 = FX_MAKE_STR("FINALLY");
      fx_str_t slit_33 = FX_MAKE_STR("finally");
      _fx_make_Ta2S(&slit_32, &slit_33, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 18) {
      fx_str_t slit_34 = FX_MAKE_STR("FOLD");
      fx_str_t slit_35 = FX_MAKE_STR("fold");
      _fx_make_Ta2S(&slit_34, &slit_35, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 19) {
      fx_str_t v_6 = {0};
      if (t_0->u.FOR) {
         fx_str_t slit_36 = FX_MAKE_STR("FOR"); fx_copy_str(&slit_36, &v_6);
      }
      else {
         fx_str_t slit_37 = FX_MAKE_STR("FOR"); FX_CALL(_fx_M6StringFM12decapitalizeS1S(&slit_37, &v_6, 0), _fx_catch_3);
      }
      fx_str_t slit_38 = FX_MAKE_STR("for");
      _fx_make_Ta2S(&v_6, &slit_38, fx_result);

   _fx_catch_3: ;
      FX_FREE_STR(&v_6);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 20) {
      fx_str_t slit_39 = FX_MAKE_STR("FROM");
      fx_str_t slit_40 = FX_MAKE_STR("from");
      _fx_make_Ta2S(&slit_39, &slit_40, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 21) {
      fx_str_t slit_41 = FX_MAKE_STR("FUN");
      fx_str_t slit_42 = FX_MAKE_STR("fun");
      _fx_make_Ta2S(&slit_41, &slit_42, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 22) {
      fx_str_t slit_43 = FX_MAKE_STR("IF");
      fx_str_t slit_44 = FX_MAKE_STR("if");
      _fx_make_Ta2S(&slit_43, &slit_44, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 23) {
      fx_str_t v_7 = {0};
      if (t_0->u.IMPORT) {
         fx_str_t slit_45 = FX_MAKE_STR("IMPORT"); fx_copy_str(&slit_45, &v_7);
      }
      else {
         fx_str_t slit_46 = FX_MAKE_STR("IMPORT"); FX_CALL(_fx_M6StringFM12decapitalizeS1S(&slit_46, &v_7, 0), _fx_catch_4);
      }
      fx_str_t slit_47 = FX_MAKE_STR("import");
      _fx_make_Ta2S(&v_7, &slit_47, fx_result);

   _fx_catch_4: ;
      FX_FREE_STR(&v_7);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 24) {
      fx_str_t slit_48 = FX_MAKE_STR("INLINE");
      fx_str_t slit_49 = FX_MAKE_STR("@inline");
      _fx_make_Ta2S(&slit_48, &slit_49, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 25) {
      fx_str_t slit_50 = FX_MAKE_STR("INTERFACE");
      fx_str_t slit_51 = FX_MAKE_STR("interface");
      _fx_make_Ta2S(&slit_50, &slit_51, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 26) {
      fx_str_t slit_52 = FX_MAKE_STR("MATCH");
      fx_str_t slit_53 = FX_MAKE_STR("match");
      _fx_make_Ta2S(&slit_52, &slit_53, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 27) {
      fx_str_t slit_54 = FX_MAKE_STR("NOTHROW");
      fx_str_t slit_55 = FX_MAKE_STR("@nothrow");
      _fx_make_Ta2S(&slit_54, &slit_55, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 28) {
      fx_str_t slit_56 = FX_MAKE_STR("OPERATOR");
      fx_str_t slit_57 = FX_MAKE_STR("operator");
      _fx_make_Ta2S(&slit_56, &slit_57, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 29) {
      fx_str_t slit_58 = FX_MAKE_STR("PARALLEL");
      fx_str_t slit_59 = FX_MAKE_STR("@parallel");
      _fx_make_Ta2S(&slit_58, &slit_59, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 30) {
      fx_str_t slit_60 = FX_MAKE_STR("PRAGMA");
      fx_str_t slit_61 = FX_MAKE_STR("pragma");
      _fx_make_Ta2S(&slit_60, &slit_61, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 31) {
      fx_str_t slit_62 = FX_MAKE_STR("PRIVATE");
      fx_str_t slit_63 = FX_MAKE_STR("@private");
      _fx_make_Ta2S(&slit_62, &slit_63, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 32) {
      fx_str_t slit_64 = FX_MAKE_STR("PURE");
      fx_str_t slit_65 = FX_MAKE_STR("@pure");
      _fx_make_Ta2S(&slit_64, &slit_65, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 33) {
      fx_str_t v_8 = {0};
      if (t_0->u.REF) {
         fx_str_t slit_66 = FX_MAKE_STR("REF"); fx_copy_str(&slit_66, &v_8);
      }
      else {
         fx_str_t slit_67 = FX_MAKE_STR("REF"); FX_CALL(_fx_M6StringFM12decapitalizeS1S(&slit_67, &v_8, 0), _fx_catch_5);
      }
      fx_str_t slit_68 = FX_MAKE_STR("ref");
      _fx_make_Ta2S(&v_8, &slit_68, fx_result);

   _fx_catch_5: ;
      FX_FREE_STR(&v_8);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 34) {
      if (t_0->u.RETURN == false) {
         fx_str_t slit_69 = FX_MAKE_STR("RETURN");
         fx_str_t slit_70 = FX_MAKE_STR("return");
         _fx_make_Ta2S(&slit_69, &slit_70, fx_result);
         goto _fx_endmatch_0;
      }
   }
   if (tag_0 == 34) {
      if (t_0->u.RETURN == true) {
         fx_str_t slit_71 = FX_MAKE_STR("RETURN_WITH");
         fx_str_t slit_72 = FX_MAKE_STR("return_with");
         _fx_make_Ta2S(&slit_71, &slit_72, fx_result);
         goto _fx_endmatch_0;
      }
   }
   if (tag_0 == 68) {
      fx_str_t slit_73 = FX_MAKE_STR("SYNC");
      fx_str_t slit_74 = FX_MAKE_STR("@sync");
      _fx_make_Ta2S(&slit_73, &slit_74, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 35) {
      fx_str_t slit_75 = FX_MAKE_STR("THROW");
      fx_str_t slit_76 = FX_MAKE_STR("throw");
      _fx_make_Ta2S(&slit_75, &slit_76, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 36) {
      fx_str_t slit_77 = FX_MAKE_STR("TRY");
      fx_str_t slit_78 = FX_MAKE_STR("try");
      _fx_make_Ta2S(&slit_77, &slit_78, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 37) {
      fx_str_t slit_79 = FX_MAKE_STR("TYPE");
      fx_str_t slit_80 = FX_MAKE_STR("type");
      _fx_make_Ta2S(&slit_79, &slit_80, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 38) {
      fx_str_t slit_81 = FX_MAKE_STR("VAL");
      fx_str_t slit_82 = FX_MAKE_STR("val");
      _fx_make_Ta2S(&slit_81, &slit_82, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 39) {
      fx_str_t slit_83 = FX_MAKE_STR("VAR");
      fx_str_t slit_84 = FX_MAKE_STR("var");
      _fx_make_Ta2S(&slit_83, &slit_84, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 40) {
      fx_str_t slit_85 = FX_MAKE_STR("WHEN");
      fx_str_t slit_86 = FX_MAKE_STR("when");
      _fx_make_Ta2S(&slit_85, &slit_86, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 41) {
      fx_str_t slit_87 = FX_MAKE_STR("WITH");
      fx_str_t slit_88 = FX_MAKE_STR("with");
      _fx_make_Ta2S(&slit_87, &slit_88, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 42) {
      fx_str_t v_9 = {0};
      if (t_0->u.WHILE) {
         fx_str_t slit_89 = FX_MAKE_STR("WHILE"); fx_copy_str(&slit_89, &v_9);
      }
      else {
         fx_str_t slit_90 = FX_MAKE_STR("WHILE"); FX_CALL(_fx_M6StringFM12decapitalizeS1S(&slit_90, &v_9, 0), _fx_catch_6);
      }
      fx_str_t slit_91 = FX_MAKE_STR("while");
      _fx_make_Ta2S(&v_9, &slit_91, fx_result);

   _fx_catch_6: ;
      FX_FREE_STR(&v_9);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 43) {
      fx_str_t slit_92 = FX_MAKE_STR("UNZIP");
      fx_str_t slit_93 = FX_MAKE_STR("@unzip");
      _fx_make_Ta2S(&slit_92, &slit_93, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 44) {
      fx_str_t v_10 = {0};
      if (t_0->u.LPAREN) {
         fx_str_t slit_94 = FX_MAKE_STR("LPAREN"); fx_copy_str(&slit_94, &v_10);
      }
      else {
         fx_str_t slit_95 = FX_MAKE_STR("LPAREN"); FX_CALL(_fx_M6StringFM12decapitalizeS1S(&slit_95, &v_10, 0), _fx_catch_7);
      }
      fx_str_t slit_96 = FX_MAKE_STR("(");
      _fx_make_Ta2S(&v_10, &slit_96, fx_result);

   _fx_catch_7: ;
      FX_FREE_STR(&v_10);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 45) {
      fx_str_t slit_97 = FX_MAKE_STR("STR_INTERP_LPAREN");
      fx_str_t slit_98 = FX_MAKE_STR("<str_interp>{");
      _fx_make_Ta2S(&slit_97, &slit_98, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 46) {
      fx_str_t slit_99 = FX_MAKE_STR("RPAREN");
      fx_str_t slit_100 = FX_MAKE_STR(")");
      _fx_make_Ta2S(&slit_99, &slit_100, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 47) {
      fx_str_t v_11 = {0};
      if (t_0->u.LSQUARE) {
         fx_str_t slit_101 = FX_MAKE_STR("LSQUARE"); fx_copy_str(&slit_101, &v_11);
      }
      else {
         fx_str_t slit_102 = FX_MAKE_STR("LSQUARE"); FX_CALL(_fx_M6StringFM12decapitalizeS1S(&slit_102, &v_11, 0), _fx_catch_8);
      }
      fx_str_t slit_103 = FX_MAKE_STR("[");
      _fx_make_Ta2S(&v_11, &slit_103, fx_result);

   _fx_catch_8: ;
      FX_FREE_STR(&v_11);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 48) {
      fx_str_t slit_104 = FX_MAKE_STR("RSQUARE");
      fx_str_t slit_105 = FX_MAKE_STR("]");
      _fx_make_Ta2S(&slit_104, &slit_105, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 49) {
      fx_str_t slit_106 = FX_MAKE_STR("LBRACE");
      fx_str_t slit_107 = FX_MAKE_STR("{");
      _fx_make_Ta2S(&slit_106, &slit_107, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 50) {
      fx_str_t slit_108 = FX_MAKE_STR("RBRACE");
      fx_str_t slit_109 = FX_MAKE_STR("}");
      _fx_make_Ta2S(&slit_108, &slit_109, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 51) {
      fx_str_t slit_110 = FX_MAKE_STR("COMMA");
      fx_str_t slit_111 = FX_MAKE_STR(",");
      _fx_make_Ta2S(&slit_110, &slit_111, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 52) {
      fx_str_t slit_112 = FX_MAKE_STR("DOT");
      fx_str_t slit_113 = FX_MAKE_STR(".");
      _fx_make_Ta2S(&slit_112, &slit_113, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 53) {
      fx_str_t slit_114 = FX_MAKE_STR("SEMICOLON");
      fx_str_t slit_115 = FX_MAKE_STR(";");
      _fx_make_Ta2S(&slit_114, &slit_115, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 54) {
      fx_str_t slit_116 = FX_MAKE_STR("COLON");
      fx_str_t slit_117 = FX_MAKE_STR(":");
      _fx_make_Ta2S(&slit_116, &slit_117, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 55) {
      fx_str_t slit_118 = FX_MAKE_STR("BAR");
      fx_str_t slit_119 = FX_MAKE_STR("|");
      _fx_make_Ta2S(&slit_118, &slit_119, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 56) {
      fx_str_t slit_120 = FX_MAKE_STR("CONS");
      fx_str_t slit_121 = FX_MAKE_STR("::");
      _fx_make_Ta2S(&slit_120, &slit_121, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 57) {
      fx_str_t slit_122 = FX_MAKE_STR("CAST");
      fx_str_t slit_123 = FX_MAKE_STR(":>");
      _fx_make_Ta2S(&slit_122, &slit_123, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 58) {
      fx_str_t v_12 = {0};
      if (t_0->u.BACKSLASH) {
         fx_str_t slit_124 = FX_MAKE_STR("BACKSLASH"); fx_copy_str(&slit_124, &v_12);
      }
      else {
         fx_str_t slit_125 = FX_MAKE_STR("BACKSLASH");
         FX_CALL(_fx_M6StringFM12decapitalizeS1S(&slit_125, &v_12, 0), _fx_catch_9);
      }
      fx_str_t slit_126 = FX_MAKE_STR("\\");
      _fx_make_Ta2S(&v_12, &slit_126, fx_result);

   _fx_catch_9: ;
      FX_FREE_STR(&v_12);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 61) {
      fx_str_t slit_127 = FX_MAKE_STR("ARROW");
      fx_str_t slit_128 = FX_MAKE_STR("->");
      _fx_make_Ta2S(&slit_127, &slit_128, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 59) {
      fx_str_t slit_129 = FX_MAKE_STR("BACK_ARROW");
      fx_str_t slit_130 = FX_MAKE_STR("<-");
      _fx_make_Ta2S(&slit_129, &slit_130, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 60) {
      fx_str_t slit_131 = FX_MAKE_STR("DOUBLE_ARROW");
      fx_str_t slit_132 = FX_MAKE_STR("=>");
      _fx_make_Ta2S(&slit_131, &slit_132, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 62) {
      fx_str_t slit_133 = FX_MAKE_STR("QUESTION");
      fx_str_t slit_134 = FX_MAKE_STR("?");
      _fx_make_Ta2S(&slit_133, &slit_134, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 63) {
      fx_str_t slit_135 = FX_MAKE_STR("EOF");
      fx_str_t slit_136 = FX_MAKE_STR("<EOF>");
      _fx_make_Ta2S(&slit_135, &slit_136, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 64) {
      fx_str_t v_13 = {0};
      if (t_0->u.MINUS) {
         fx_str_t slit_137 = FX_MAKE_STR("MINUS"); fx_copy_str(&slit_137, &v_13);
      }
      else {
         fx_str_t slit_138 = FX_MAKE_STR("MINUS"); FX_CALL(_fx_M6StringFM12decapitalizeS1S(&slit_138, &v_13, 0), _fx_catch_10);
      }
      fx_str_t slit_139 = FX_MAKE_STR("-");
      _fx_make_Ta2S(&v_13, &slit_139, fx_result);

   _fx_catch_10: ;
      FX_FREE_STR(&v_13);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 65) {
      fx_str_t v_14 = {0};
      if (t_0->u.PLUS) {
         fx_str_t slit_140 = FX_MAKE_STR("PLUS"); fx_copy_str(&slit_140, &v_14);
      }
      else {
         fx_str_t slit_141 = FX_MAKE_STR("PLUS"); FX_CALL(_fx_M6StringFM12decapitalizeS1S(&slit_141, &v_14, 0), _fx_catch_11);
      }
      fx_str_t slit_142 = FX_MAKE_STR("+");
      _fx_make_Ta2S(&v_14, &slit_142, fx_result);

   _fx_catch_11: ;
      FX_FREE_STR(&v_14);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 66) {
      fx_str_t v_15 = {0};
      if (t_0->u.STAR) {
         fx_str_t slit_143 = FX_MAKE_STR("STAR"); fx_copy_str(&slit_143, &v_15);
      }
      else {
         fx_str_t slit_144 = FX_MAKE_STR("STAR"); FX_CALL(_fx_M6StringFM12decapitalizeS1S(&slit_144, &v_15, 0), _fx_catch_12);
      }
      fx_str_t slit_145 = FX_MAKE_STR("*");
      _fx_make_Ta2S(&v_15, &slit_145, fx_result);

   _fx_catch_12: ;
      FX_FREE_STR(&v_15);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 67) {
      fx_str_t slit_146 = FX_MAKE_STR("SLASH");
      fx_str_t slit_147 = FX_MAKE_STR("/");
      _fx_make_Ta2S(&slit_146, &slit_147, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 69) {
      fx_str_t slit_148 = FX_MAKE_STR("PERCENT");
      fx_str_t slit_149 = FX_MAKE_STR("%");
      _fx_make_Ta2S(&slit_148, &slit_149, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 70) {
      fx_str_t slit_150 = FX_MAKE_STR("POWER");
      fx_str_t slit_151 = FX_MAKE_STR("**");
      _fx_make_Ta2S(&slit_150, &slit_151, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 72) {
      fx_str_t v_16 = {0};
      if (t_0->u.DOT_PLUS) {
         fx_str_t slit_152 = FX_MAKE_STR("DOT_PLUS"); fx_copy_str(&slit_152, &v_16);
      }
      else {
         fx_str_t slit_153 = FX_MAKE_STR("DOT_PLUS");
         FX_CALL(_fx_M6StringFM12decapitalizeS1S(&slit_153, &v_16, 0), _fx_catch_13);
      }
      fx_str_t slit_154 = FX_MAKE_STR(".+");
      _fx_make_Ta2S(&v_16, &slit_154, fx_result);

   _fx_catch_13: ;
      FX_FREE_STR(&v_16);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 73) {
      fx_str_t v_17 = {0};
      if (t_0->u.DOT_MINUS) {
         fx_str_t slit_155 = FX_MAKE_STR("DOT_MINUS"); fx_copy_str(&slit_155, &v_17);
      }
      else {
         fx_str_t slit_156 = FX_MAKE_STR("DOT_MINUS");
         FX_CALL(_fx_M6StringFM12decapitalizeS1S(&slit_156, &v_17, 0), _fx_catch_14);
      }
      fx_str_t slit_157 = FX_MAKE_STR(".-");
      _fx_make_Ta2S(&v_17, &slit_157, fx_result);

   _fx_catch_14: ;
      FX_FREE_STR(&v_17);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 71) {
      fx_str_t slit_158 = FX_MAKE_STR("DOT_STAR");
      fx_str_t slit_159 = FX_MAKE_STR(".*");
      _fx_make_Ta2S(&slit_158, &slit_159, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 74) {
      fx_str_t slit_160 = FX_MAKE_STR("DOT_SLASH");
      fx_str_t slit_161 = FX_MAKE_STR("./");
      _fx_make_Ta2S(&slit_160, &slit_161, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 75) {
      fx_str_t slit_162 = FX_MAKE_STR("DOT_PERCENT");
      fx_str_t slit_163 = FX_MAKE_STR(".%");
      _fx_make_Ta2S(&slit_162, &slit_163, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 76) {
      fx_str_t slit_164 = FX_MAKE_STR("DOT_POWER");
      fx_str_t slit_165 = FX_MAKE_STR(".**");
      _fx_make_Ta2S(&slit_164, &slit_165, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 78) {
      fx_str_t slit_166 = FX_MAKE_STR("SHIFT_LEFT");
      fx_str_t slit_167 = FX_MAKE_STR("<<");
      _fx_make_Ta2S(&slit_166, &slit_167, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 77) {
      fx_str_t slit_168 = FX_MAKE_STR("SHIFT_RIGHT");
      fx_str_t slit_169 = FX_MAKE_STR(">>");
      _fx_make_Ta2S(&slit_168, &slit_169, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 79) {
      fx_str_t slit_170 = FX_MAKE_STR("BITWISE_AND");
      fx_str_t slit_171 = FX_MAKE_STR("&");
      _fx_make_Ta2S(&slit_170, &slit_171, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 80) {
      fx_str_t slit_172 = FX_MAKE_STR("BITWISE_XOR");
      fx_str_t slit_173 = FX_MAKE_STR("^");
      _fx_make_Ta2S(&slit_172, &slit_173, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 81) {
      fx_str_t slit_174 = FX_MAKE_STR("BITWISE_OR");
      fx_str_t slit_175 = FX_MAKE_STR("|");
      _fx_make_Ta2S(&slit_174, &slit_175, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 82) {
      fx_str_t slit_176 = FX_MAKE_STR("TILDE");
      fx_str_t slit_177 = FX_MAKE_STR("~");
      _fx_make_Ta2S(&slit_176, &slit_177, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 83) {
      fx_str_t slit_178 = FX_MAKE_STR("LOGICAL_AND");
      fx_str_t slit_179 = FX_MAKE_STR("&&");
      _fx_make_Ta2S(&slit_178, &slit_179, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 84) {
      fx_str_t slit_180 = FX_MAKE_STR("LOGICAL_OR");
      fx_str_t slit_181 = FX_MAKE_STR("||");
      _fx_make_Ta2S(&slit_180, &slit_181, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 85) {
      fx_str_t slit_182 = FX_MAKE_STR("LOGICAL_NOT");
      fx_str_t slit_183 = FX_MAKE_STR("!");
      _fx_make_Ta2S(&slit_182, &slit_183, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 86) {
      fx_str_t slit_184 = FX_MAKE_STR("EQUAL");
      fx_str_t slit_185 = FX_MAKE_STR("=");
      _fx_make_Ta2S(&slit_184, &slit_185, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 87) {
      fx_str_t slit_186 = FX_MAKE_STR("DOT_EQUAL");
      fx_str_t slit_187 = FX_MAKE_STR(".=");
      _fx_make_Ta2S(&slit_186, &slit_187, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 88) {
      fx_str_t v_18 = {0};
      fx_str_t v_19 = {0};
      fx_str_t v_20 = {0};
      fx_str_t v_21 = {0};
      _fx_N13Ast__binary_t o_0 = t_0->u.AUG_BINOP;
      FX_CALL(_fx_M3AstFM6stringS1N13Ast__binary_t(o_0, &v_18, 0), _fx_catch_15);
      fx_str_t slit_188 = FX_MAKE_STR("AUG_BINOP(");
      fx_str_t slit_189 = FX_MAKE_STR(")");
      {
         const fx_str_t strs_3[] = { slit_188, v_18, slit_189 };
         FX_CALL(fx_strjoin(0, 0, 0, strs_3, 3, &v_19), _fx_catch_15);
      }
      FX_CALL(_fx_M3AstFM6stringS1N13Ast__binary_t(o_0, &v_20, 0), _fx_catch_15);
      fx_str_t slit_190 = FX_MAKE_STR("=");
      {
         const fx_str_t strs_4[] = { v_20, slit_190 };
         FX_CALL(fx_strjoin(0, 0, 0, strs_4, 2, &v_21), _fx_catch_15);
      }
      _fx_make_Ta2S(&v_19, &v_21, fx_result);

   _fx_catch_15: ;
      FX_FREE_STR(&v_21);
      FX_FREE_STR(&v_20);
      FX_FREE_STR(&v_19);
      FX_FREE_STR(&v_18);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 89) {
      fx_str_t slit_191 = FX_MAKE_STR("SPACESHIP");
      fx_str_t slit_192 = FX_MAKE_STR("<=>");
      _fx_make_Ta2S(&slit_191, &slit_192, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 90) {
      fx_str_t v_22 = {0};
      fx_str_t v_23 = {0};
      fx_str_t v_24 = {0};
      _fx_N12Ast__cmpop_t* c_0 = &t_0->u.CMP;
      FX_CALL(_fx_M3AstFM6stringS1N12Ast__cmpop_t(c_0, &v_22, 0), _fx_catch_16);
      fx_str_t slit_193 = FX_MAKE_STR("CMP(");
      fx_str_t slit_194 = FX_MAKE_STR(")");
      {
         const fx_str_t strs_5[] = { slit_193, v_22, slit_194 };
         FX_CALL(fx_strjoin(0, 0, 0, strs_5, 3, &v_23), _fx_catch_16);
      }
      FX_CALL(_fx_M3AstFM6stringS1N12Ast__cmpop_t(c_0, &v_24, 0), _fx_catch_16);
      _fx_make_Ta2S(&v_23, &v_24, fx_result);

   _fx_catch_16: ;
      FX_FREE_STR(&v_24);
      FX_FREE_STR(&v_23);
      FX_FREE_STR(&v_22);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 91) {
      fx_str_t slit_195 = FX_MAKE_STR("DOT_SPACESHIP");
      fx_str_t slit_196 = FX_MAKE_STR(".<=>");
      _fx_make_Ta2S(&slit_195, &slit_196, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 92) {
      fx_str_t v_25 = {0};
      fx_str_t v_26 = {0};
      fx_str_t v_27 = {0};
      fx_str_t v_28 = {0};
      _fx_N12Ast__cmpop_t* c_1 = &t_0->u.DOT_CMP;
      FX_CALL(_fx_M3AstFM6stringS1N12Ast__cmpop_t(c_1, &v_25, 0), _fx_catch_17);
      fx_str_t slit_197 = FX_MAKE_STR("DOT_CMP(");
      fx_str_t slit_198 = FX_MAKE_STR(")");
      {
         const fx_str_t strs_6[] = { slit_197, v_25, slit_198 };
         FX_CALL(fx_strjoin(0, 0, 0, strs_6, 3, &v_26), _fx_catch_17);
      }
      FX_CALL(_fx_M3AstFM6stringS1N12Ast__cmpop_t(c_1, &v_27, 0), _fx_catch_17);
      fx_str_t slit_199 = FX_MAKE_STR(".");
      {
         const fx_str_t strs_7[] = { slit_199, v_27 };
         FX_CALL(fx_strjoin(0, 0, 0, strs_7, 2, &v_28), _fx_catch_17);
      }
      _fx_make_Ta2S(&v_26, &v_28, fx_result);

   _fx_catch_17: ;
      FX_FREE_STR(&v_28);
      FX_FREE_STR(&v_27);
      FX_FREE_STR(&v_26);
      FX_FREE_STR(&v_25);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 93) {
      fx_str_t slit_200 = FX_MAKE_STR("SAME");
      fx_str_t slit_201 = FX_MAKE_STR("===");
      _fx_make_Ta2S(&slit_200, &slit_201, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 94) {
      fx_str_t r_0 = {0};
      fx_str_t slit_202 = FX_MAKE_STR("<reserved(");
      fx_str_t* s_2 = &t_0->u.RESERVED;
      fx_str_t slit_203 = FX_MAKE_STR(")>");
      {
         const fx_str_t strs_8[] = { slit_202, *s_2, slit_203 };
         FX_CALL(fx_strjoin(0, 0, 0, strs_8, 3, &r_0), _fx_catch_18);
      }
      _fx_make_Ta2S(&r_0, &r_0, fx_result);

   _fx_catch_18: ;
      FX_FREE_STR(&r_0);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 95) {
      fx_str_t slit_204 = FX_MAKE_STR("PP_IF");
      fx_str_t slit_205 = FX_MAKE_STR("@IF");
      _fx_make_Ta2S(&slit_204, &slit_205, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 96) {
      fx_str_t slit_206 = FX_MAKE_STR("PP_IFDEF");
      fx_str_t slit_207 = FX_MAKE_STR("@IFDEF");
      _fx_make_Ta2S(&slit_206, &slit_207, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 97) {
      fx_str_t slit_208 = FX_MAKE_STR("PP_IFNDEF");
      fx_str_t slit_209 = FX_MAKE_STR("@IFNDEF");
      _fx_make_Ta2S(&slit_208, &slit_209, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 98) {
      fx_str_t slit_210 = FX_MAKE_STR("PP_ELIF");
      fx_str_t slit_211 = FX_MAKE_STR("@ELIF");
      _fx_make_Ta2S(&slit_210, &slit_211, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 99) {
      fx_str_t slit_212 = FX_MAKE_STR("PP_ELSE");
      fx_str_t slit_213 = FX_MAKE_STR("@ELSE");
      _fx_make_Ta2S(&slit_212, &slit_213, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 100) {
      fx_str_t slit_214 = FX_MAKE_STR("PP_ENDIF");
      fx_str_t slit_215 = FX_MAKE_STR("@ENDIF");
      _fx_make_Ta2S(&slit_214, &slit_215, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 101) {
      fx_str_t slit_216 = FX_MAKE_STR("PP_DEFINE");
      fx_str_t slit_217 = FX_MAKE_STR("@DEFINE");
      _fx_make_Ta2S(&slit_216, &slit_217, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 102) {
      fx_str_t slit_218 = FX_MAKE_STR("PP_UNDEF");
      fx_str_t slit_219 = FX_MAKE_STR("@UNDEF");
      _fx_make_Ta2S(&slit_218, &slit_219, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 103) {
      fx_str_t slit_220 = FX_MAKE_STR("PP_ERROR");
      fx_str_t slit_221 = FX_MAKE_STR("@ERROR");
      _fx_make_Ta2S(&slit_220, &slit_221, fx_result);
      goto _fx_endmatch_0;
   }
   if (tag_0 == 104) {
      fx_str_t slit_222 = FX_MAKE_STR("PP_WARNING");
      fx_str_t slit_223 = FX_MAKE_STR("@WARNING");
      _fx_make_Ta2S(&slit_222, &slit_223, fx_result);
      goto _fx_endmatch_0;
   }
   FX_FAST_THROW(FX_EXN_NoMatchError, _fx_cleanup);

_fx_endmatch_0: ;

_fx_cleanup: ;
   return fx_status;
}

FX_EXTERN_C int _fx_M5LexerFM9getnumberT2iT2N14Lexer__token_tC4SiTa2iB(
   fx_str_t* s_0,
   int_ pos_0,
   struct _fx_Ta2i* loc_0,
   bool just_int_0,
   struct _fx_T2iT2N14Lexer__token_tC* fx_result,
   void* fx_fv)
{
   fx_exn_t exn_0 = {0};
   int fx_status = 0;
   _fx_T2N14Lexer__token_tC v_0 = {0};
   _fx_T5ildiC v_1;
   FX_CALL(_fx_M10LexerUtilsFM9getnumberT5ildiC4SiBB(s_0, pos_0, just_int_0, true, &v_1, 0), _fx_catch_2);
   int_ pos1_0 = v_1.t0;
   int64_t i_0 = v_1.t1;
   double f_0 = v_1.t2;
   int_ bits_0 = v_1.t3;
   char_ c_0 = v_1.t4;
   if (bits_0 == 128) {
      if (c_0 == (char_)105) {
         fx_str_t v_2 = {0};
         _fx_N10Ast__lit_t v_3 = {0};
         _fx_N14Lexer__token_t v_4 = {0};
         FX_CALL(fx_substr(s_0, pos_0, pos1_0 - 1, 1, 0, &v_2), _fx_catch_0);
         _fx_M3AstFM9LitStringN10Ast__lit_t1S(&v_2, &v_3);
         _fx_M5LexerFM7LITERALN14Lexer__token_t1N10Ast__lit_t(&v_3, &v_4);
         _fx_make_T2N14Lexer__token_tC(&v_4, (char_)108, &v_0);

      _fx_catch_0: ;
         _fx_free_N14Lexer__token_t(&v_4);
         _fx_free_N10Ast__lit_t(&v_3);
         FX_FREE_STR(&v_2);
         goto _fx_endmatch_0;
      }
   }
   if (bits_0 == 0) {
      if (c_0 == (char_)105) {
         _fx_N10Ast__lit_t v_5 = {0};
         _fx_N14Lexer__token_t v_6 = {0};
         _fx_M3AstFM6LitIntN10Ast__lit_t1l(i_0, &v_5);
         _fx_M5LexerFM7LITERALN14Lexer__token_t1N10Ast__lit_t(&v_5, &v_6);
         _fx_make_T2N14Lexer__token_tC(&v_6, (char_)105, &v_0);
         _fx_free_N14Lexer__token_t(&v_6);
         _fx_free_N10Ast__lit_t(&v_5);
         goto _fx_endmatch_0;
      }
   }
   if (c_0 == (char_)105) {
      _fx_N10Ast__lit_t v_7 = {0};
      _fx_N14Lexer__token_t v_8 = {0};
      _fx_M3AstFM7LitSIntN10Ast__lit_t2il(bits_0, i_0, &v_7);
      _fx_M5LexerFM7LITERALN14Lexer__token_t1N10Ast__lit_t(&v_7, &v_8);
      _fx_make_T2N14Lexer__token_tC(&v_8, (char_)115, &v_0);
      _fx_free_N14Lexer__token_t(&v_8);
      _fx_free_N10Ast__lit_t(&v_7);
      goto _fx_endmatch_0;
   }
   if (c_0 == (char_)117) {
      _fx_N10Ast__lit_t v_9 = {0};
      _fx_N14Lexer__token_t v_10 = {0};
      _fx_M3AstFM7LitUIntN10Ast__lit_t2iq(bits_0, (uint64_t)i_0, &v_9);
      _fx_M5LexerFM7LITERALN14Lexer__token_t1N10Ast__lit_t(&v_9, &v_10);
      _fx_make_T2N14Lexer__token_tC(&v_10, (char_)117, &v_0);
      _fx_free_N14Lexer__token_t(&v_10);
      _fx_free_N10Ast__lit_t(&v_9);
      goto _fx_endmatch_0;
   }
   if (c_0 == (char_)102) {
      _fx_N10Ast__lit_t v_11 = {0};
      _fx_N14Lexer__token_t v_12 = {0};
      _fx_M3AstFM8LitFloatN10Ast__lit_t2id(bits_0, f_0, &v_11);
      _fx_M5LexerFM7LITERALN14Lexer__token_t1N10Ast__lit_t(&v_11, &v_12);
      _fx_make_T2N14Lexer__token_tC(&v_12, (char_)102, &v_0);
      _fx_free_N14Lexer__token_t(&v_12);
      _fx_free_N10Ast__lit_t(&v_11);
      goto _fx_endmatch_0;
   }
   fx_str_t v_13 = {0};
   fx_str_t v_14 = {0};
   fx_exn_t v_15 = {0};
   FX_CALL(_fx_F6stringS1C(c_0, &v_13, 0), _fx_catch_1);
   fx_str_t slit_0 = FX_MAKE_STR("unknown type \'");
   fx_str_t slit_1 = FX_MAKE_STR("\' of numeric literal");
   {
      const fx_str_t strs_0[] = { slit_0, v_13, slit_1 };
      FX_CALL(fx_strjoin(0, 0, 0, strs_0, 3, &v_14), _fx_catch_1);
   }
   FX_CALL(_fx_M10LexerUtilsFM15make_LexerErrorE2Ta2iS(loc_0, &v_14, &v_15), _fx_catch_1);
   FX_THROW(&v_15, true, _fx_catch_1);

_fx_catch_1: ;
   fx_free_exn(&v_15);
   FX_FREE_STR(&v_14);
   FX_FREE_STR(&v_13);

_fx_endmatch_0: ;
   FX_CHECK_EXN(_fx_catch_2);
   _fx_make_T2iT2N14Lexer__token_tC(pos1_0, &v_0, fx_result);

_fx_catch_2: ;
   _fx_free_T2N14Lexer__token_tC(&v_0);
   if (fx_status < 0) {
      fx_exn_get_and_reset(fx_status, &exn_0);
      fx_status = 0;
      _fx_free_T2iT2N14Lexer__token_tC(fx_result);
      int tag_0 = exn_0.tag;
      if (tag_0 == FX_EXN_OverflowError) {
         fx_exn_t v_16 = {0};
         fx_str_t slit_2 = FX_MAKE_STR("too long numeric literal");
         FX_CALL(_fx_M10LexerUtilsFM15make_LexerErrorE2Ta2iS(loc_0, &slit_2, &v_16), _fx_catch_3);
         FX_THROW(&v_16, true, _fx_catch_3);

      _fx_catch_3: ;
         fx_free_exn(&v_16);
      }
      else if (tag_0 == FX_EXN_OutOfRangeError) {
         fx_exn_t v_17 = {0};
         fx_str_t slit_3 = FX_MAKE_STR("the numeric literal is out of range for the specified type");
         FX_CALL(_fx_M10LexerUtilsFM15make_LexerErrorE2Ta2iS(loc_0, &slit_3, &v_17), _fx_catch_4);
         FX_THROW(&v_17, true, _fx_catch_4);

      _fx_catch_4: ;
         fx_free_exn(&v_17);
      }
      else if (tag_0 == FX_EXN_BadArgError) {
         fx_exn_t v_18 = {0};
         fx_str_t slit_4 = FX_MAKE_STR("invalid i/u suffix (should be 8, 16, 32 or 64)");
         FX_CALL(_fx_M10LexerUtilsFM15make_LexerErrorE2Ta2iS(loc_0, &slit_4, &v_18), _fx_catch_5);
         FX_THROW(&v_18, true, _fx_catch_5);

      _fx_catch_5: ;
         fx_free_exn(&v_18);
      }
      else {
         fx_str_t v_19 = {0};
         fx_str_t v_20 = {0};
         fx_exn_t v_21 = {0};
         FX_CALL(_fx_F6stringS1E(&exn_0, &v_19, 0), _fx_catch_6);
         fx_str_t slit_5 = FX_MAKE_STR("exception ");
         fx_str_t slit_6 = FX_MAKE_STR(" occured when parsing numeric literal");
         {
            const fx_str_t strs_1[] = { slit_5, v_19, slit_6 };
            FX_CALL(fx_strjoin(0, 0, 0, strs_1, 3, &v_20), _fx_catch_6);
         }
         FX_CALL(_fx_M10LexerUtilsFM15make_LexerErrorE2Ta2iS(loc_0, &v_20, &v_21), _fx_catch_6);
         FX_THROW(&v_21, true, _fx_catch_6);

      _fx_catch_6: ;
         fx_free_exn(&v_21);
         FX_FREE_STR(&v_20);
         FX_FREE_STR(&v_19);
      }
      FX_CHECK_EXN(_fx_cleanup);
   }

_fx_cleanup: ;
   fx_free_exn(&exn_0);
   return fx_status;
}

FX_EXTERN_C int _fx_M5LexerFM6addlocLT2N14Lexer__token_tTa2i2Ta2iLN14Lexer__token_t(
   struct _fx_Ta2i* loc_0,
   struct _fx_LN14Lexer__token_t_data_t* tokens_0,
   struct _fx_LT2N14Lexer__token_tTa2i_data_t** fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   _fx_LT2N14Lexer__token_tTa2i lstend_0 = 0;
   _fx_LN14Lexer__token_t lst_0 = tokens_0;
   for (; lst_0; lst_0 = lst_0->tl) {
      _fx_T2N14Lexer__token_tTa2i tup_0 = {0};
      _fx_N14Lexer__token_t* t_0 = &lst_0->hd;
      _fx_make_T2N14Lexer__token_tTa2i(t_0, loc_0, &tup_0);
      _fx_LT2N14Lexer__token_tTa2i node_0 = 0;
      FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&tup_0, 0, false, &node_0), _fx_catch_0);
      FX_LIST_APPEND(*fx_result, lstend_0, node_0);

   _fx_catch_0: ;
      _fx_free_T2N14Lexer__token_tTa2i(&tup_0);
      FX_CHECK_EXN(_fx_cleanup);
   }

_fx_cleanup: ;
   return fx_status;
}

FX_EXTERN_C int _fx_M5LexerFM8check_nev3BTa2iS(bool ne_0, struct _fx_Ta2i* loc_0, fx_str_t* name_0, void* fx_fv)
{
   fx_str_t v_0 = {0};
   fx_exn_t v_1 = {0};
   int fx_status = 0;
   if (!ne_0) {
      fx_str_t slit_0 = FX_MAKE_STR("unexpected \'");
      fx_str_t slit_1 = FX_MAKE_STR("\'. Insert \';\' or newline");
      {
         const fx_str_t strs_0[] = { slit_0, *name_0, slit_1 };
         FX_CALL(fx_strjoin(0, 0, 0, strs_0, 3, &v_0), _fx_cleanup);
      }
      FX_CALL(_fx_M10LexerUtilsFM15make_LexerErrorE2Ta2iS(loc_0, &v_0, &v_1), _fx_cleanup);
      FX_THROW(&v_1, true, _fx_cleanup);
   }

_fx_cleanup: ;
   FX_FREE_STR(&v_0);
   fx_free_exn(&v_1);
   return fx_status;
}

FX_EXTERN_C int _fx_M5LexerFM10fmt2tokensLT2N14Lexer__token_tTa2i2Nt6option1R8format_tTa2i(
   struct _fx_Nt6option1R8format_t* fmt_0,
   struct _fx_Ta2i* loc_0,
   struct _fx_LT2N14Lexer__token_tTa2i_data_t** fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   if (fmt_0->tag == 2) {
      _fx_N10Ast__lit_t v_0 = {0};
      _fx_LN14Lexer__token_t params_0 = 0;
      _fx_N14Lexer__token_t v_1 = {0};
      _fx_N14Lexer__token_t v_2 = {0};
      _fx_LN14Lexer__token_t v_3 = 0;
      _fx_N10Ast__lit_t v_4 = {0};
      _fx_LN14Lexer__token_t params_1 = 0;
      _fx_N14Lexer__token_t v_5 = {0};
      _fx_N14Lexer__token_t v_6 = {0};
      _fx_LN14Lexer__token_t v_7 = 0;
      _fx_N10Ast__lit_t v_8 = {0};
      _fx_LN14Lexer__token_t params_2 = 0;
      _fx_N14Lexer__token_t v_9 = {0};
      _fx_N14Lexer__token_t v_10 = {0};
      _fx_LN14Lexer__token_t v_11 = 0;
      _fx_N10Ast__lit_t v_12 = {0};
      _fx_LN14Lexer__token_t params_3 = 0;
      _fx_N14Lexer__token_t v_13 = {0};
      _fx_N14Lexer__token_t v_14 = {0};
      _fx_LN14Lexer__token_t v_15 = 0;
      _fx_N10Ast__lit_t v_16 = {0};
      _fx_LN14Lexer__token_t params_4 = 0;
      _fx_N14Lexer__token_t v_17 = {0};
      _fx_N14Lexer__token_t v_18 = {0};
      _fx_LN14Lexer__token_t v_19 = 0;
      _fx_N10Ast__lit_t v_20 = {0};
      _fx_LN14Lexer__token_t params_5 = 0;
      _fx_N14Lexer__token_t v_21 = {0};
      _fx_N14Lexer__token_t v_22 = {0};
      _fx_LN14Lexer__token_t v_23 = 0;
      _fx_N10Ast__lit_t v_24 = {0};
      _fx_LN14Lexer__token_t params_6 = 0;
      _fx_N14Lexer__token_t v_25 = {0};
      _fx_N14Lexer__token_t v_26 = {0};
      _fx_LN14Lexer__token_t v_27 = 0;
      _fx_N10Ast__lit_t v_28 = {0};
      _fx_LN14Lexer__token_t params_7 = 0;
      _fx_N14Lexer__token_t v_29 = {0};
      _fx_N14Lexer__token_t v_30 = {0};
      _fx_LN14Lexer__token_t v_31 = 0;
      _fx_N14Lexer__token_t v_32 = {0};
      _fx_LN14Lexer__token_t v_33 = 0;
      _fx_LN14Lexer__token_t v_34 = 0;
      _fx_LN14Lexer__token_t v_35 = 0;
      _fx_LN14Lexer__token_t v_36 = 0;
      _fx_R8format_t* v_37 = &fmt_0->u.Some;
      char_ typ_0 = v_37->typ;
      char_ grouping_0 = v_37->grouping;
      int_ precision_0 = v_37->precision;
      int_ width_0 = v_37->width;
      bool num_alt_0 = v_37->num_alt;
      char_ sign_0 = v_37->sign;
      char_ align_0 = v_37->align;
      char_ fill_0 = v_37->fill;
      _fx_M3AstFM7LitCharN10Ast__lit_t1C(typ_0, &v_0);
      if (typ_0 != (char_)32) {
         fx_str_t slit_0 = FX_MAKE_STR("typ");
         _fx_M5LexerFM5IDENTN14Lexer__token_t2BS(true, &slit_0, &v_1);
         _fx_M5LexerFM7LITERALN14Lexer__token_t1N10Ast__lit_t(&v_0, &v_2);
         FX_CALL(_fx_cons_LN14Lexer__token_t(&_fx_g12Lexer__COMMA, 0, true, &v_3), _fx_catch_19);
         FX_CALL(_fx_cons_LN14Lexer__token_t(&v_2, v_3, false, &v_3), _fx_catch_19);
         FX_CALL(_fx_cons_LN14Lexer__token_t(&_fx_g12Lexer__EQUAL, v_3, false, &v_3), _fx_catch_19);
         FX_CALL(_fx_cons_LN14Lexer__token_t(&v_1, v_3, false, &v_3), _fx_catch_19);
         if (v_3 != 0) {
            FX_COPY_PTR(v_3, &params_0);
         }
         FX_CHECK_EXN(_fx_catch_19);
      }
      _fx_M3AstFM7LitCharN10Ast__lit_t1C(grouping_0, &v_4);
      if (grouping_0 == (char_)32) {
         FX_COPY_PTR(params_0, &params_1);
      }
      else {
         fx_str_t slit_1 = FX_MAKE_STR("grouping");
         _fx_M5LexerFM5IDENTN14Lexer__token_t2BS(true, &slit_1, &v_5);
         _fx_M5LexerFM7LITERALN14Lexer__token_t1N10Ast__lit_t(&v_4, &v_6);
         FX_CALL(_fx_cons_LN14Lexer__token_t(&_fx_g12Lexer__COMMA, 0, true, &v_7), _fx_catch_19);
         FX_CALL(_fx_cons_LN14Lexer__token_t(&v_6, v_7, false, &v_7), _fx_catch_19);
         FX_CALL(_fx_cons_LN14Lexer__token_t(&_fx_g12Lexer__EQUAL, v_7, false, &v_7), _fx_catch_19);
         FX_CALL(_fx_cons_LN14Lexer__token_t(&v_5, v_7, false, &v_7), _fx_catch_19);
         if (v_7 == 0) {
            FX_COPY_PTR(params_0, &params_1);
         }
         else if (params_0 == 0) {
            FX_COPY_PTR(v_7, &params_1);
         }
         else {
            _fx_LN14Lexer__token_t v_38 = 0;
            _fx_LN14Lexer__token_t lstend_0 = 0;
            _fx_LN14Lexer__token_t lst_0 = v_7;
            for (; lst_0; lst_0 = lst_0->tl) {
               _fx_N14Lexer__token_t* x_0 = &lst_0->hd;
               _fx_LN14Lexer__token_t node_0 = 0;
               FX_CALL(_fx_cons_LN14Lexer__token_t(x_0, 0, false, &node_0), _fx_catch_0);
               FX_LIST_APPEND(v_38, lstend_0, node_0);

            _fx_catch_0: ;
               FX_CHECK_EXN(_fx_catch_1);
            }
            _fx_M5LexerFM5link2LN14Lexer__token_t2LN14Lexer__token_tLN14Lexer__token_t(v_38, params_0, &params_1, 0);

         _fx_catch_1: ;
            if (v_38) {
               _fx_free_LN14Lexer__token_t(&v_38);
            }
         }
         FX_CHECK_EXN(_fx_catch_19);
      }
      _fx_M3AstFM6LitIntN10Ast__lit_t1l((int64_t)precision_0, &v_8);
      if (precision_0 == -1) {
         FX_COPY_PTR(params_1, &params_2);
      }
      else {
         fx_str_t slit_2 = FX_MAKE_STR("precision");
         _fx_M5LexerFM5IDENTN14Lexer__token_t2BS(true, &slit_2, &v_9);
         _fx_M5LexerFM7LITERALN14Lexer__token_t1N10Ast__lit_t(&v_8, &v_10);
         FX_CALL(_fx_cons_LN14Lexer__token_t(&_fx_g12Lexer__COMMA, 0, true, &v_11), _fx_catch_19);
         FX_CALL(_fx_cons_LN14Lexer__token_t(&v_10, v_11, false, &v_11), _fx_catch_19);
         FX_CALL(_fx_cons_LN14Lexer__token_t(&_fx_g12Lexer__EQUAL, v_11, false, &v_11), _fx_catch_19);
         FX_CALL(_fx_cons_LN14Lexer__token_t(&v_9, v_11, false, &v_11), _fx_catch_19);
         if (v_11 == 0) {
            FX_COPY_PTR(params_1, &params_2);
         }
         else if (params_1 == 0) {
            FX_COPY_PTR(v_11, &params_2);
         }
         else {
            _fx_LN14Lexer__token_t v_39 = 0;
            _fx_LN14Lexer__token_t lstend_1 = 0;
            _fx_LN14Lexer__token_t lst_1 = v_11;
            for (; lst_1; lst_1 = lst_1->tl) {
               _fx_N14Lexer__token_t* x_1 = &lst_1->hd;
               _fx_LN14Lexer__token_t node_1 = 0;
               FX_CALL(_fx_cons_LN14Lexer__token_t(x_1, 0, false, &node_1), _fx_catch_2);
               FX_LIST_APPEND(v_39, lstend_1, node_1);

            _fx_catch_2: ;
               FX_CHECK_EXN(_fx_catch_3);
            }
            _fx_M5LexerFM5link2LN14Lexer__token_t2LN14Lexer__token_tLN14Lexer__token_t(v_39, params_1, &params_2, 0);

         _fx_catch_3: ;
            if (v_39) {
               _fx_free_LN14Lexer__token_t(&v_39);
            }
         }
         FX_CHECK_EXN(_fx_catch_19);
      }
      _fx_M3AstFM6LitIntN10Ast__lit_t1l((int64_t)width_0, &v_12);
      if (width_0 == 0) {
         FX_COPY_PTR(params_2, &params_3);
      }
      else {
         fx_str_t slit_3 = FX_MAKE_STR("width");
         _fx_M5LexerFM5IDENTN14Lexer__token_t2BS(true, &slit_3, &v_13);
         _fx_M5LexerFM7LITERALN14Lexer__token_t1N10Ast__lit_t(&v_12, &v_14);
         FX_CALL(_fx_cons_LN14Lexer__token_t(&_fx_g12Lexer__COMMA, 0, true, &v_15), _fx_catch_19);
         FX_CALL(_fx_cons_LN14Lexer__token_t(&v_14, v_15, false, &v_15), _fx_catch_19);
         FX_CALL(_fx_cons_LN14Lexer__token_t(&_fx_g12Lexer__EQUAL, v_15, false, &v_15), _fx_catch_19);
         FX_CALL(_fx_cons_LN14Lexer__token_t(&v_13, v_15, false, &v_15), _fx_catch_19);
         if (v_15 == 0) {
            FX_COPY_PTR(params_2, &params_3);
         }
         else if (params_2 == 0) {
            FX_COPY_PTR(v_15, &params_3);
         }
         else {
            _fx_LN14Lexer__token_t v_40 = 0;
            _fx_LN14Lexer__token_t lstend_2 = 0;
            _fx_LN14Lexer__token_t lst_2 = v_15;
            for (; lst_2; lst_2 = lst_2->tl) {
               _fx_N14Lexer__token_t* x_2 = &lst_2->hd;
               _fx_LN14Lexer__token_t node_2 = 0;
               FX_CALL(_fx_cons_LN14Lexer__token_t(x_2, 0, false, &node_2), _fx_catch_4);
               FX_LIST_APPEND(v_40, lstend_2, node_2);

            _fx_catch_4: ;
               FX_CHECK_EXN(_fx_catch_5);
            }
            _fx_M5LexerFM5link2LN14Lexer__token_t2LN14Lexer__token_tLN14Lexer__token_t(v_40, params_2, &params_3, 0);

         _fx_catch_5: ;
            if (v_40) {
               _fx_free_LN14Lexer__token_t(&v_40);
            }
         }
         FX_CHECK_EXN(_fx_catch_19);
      }
      _fx_M3AstFM7LitBoolN10Ast__lit_t1B(num_alt_0, &v_16);
      if (num_alt_0 == false) {
         FX_COPY_PTR(params_3, &params_4);
      }
      else {
         fx_str_t slit_4 = FX_MAKE_STR("num_alt");
         _fx_M5LexerFM5IDENTN14Lexer__token_t2BS(true, &slit_4, &v_17);
         _fx_M5LexerFM7LITERALN14Lexer__token_t1N10Ast__lit_t(&v_16, &v_18);
         FX_CALL(_fx_cons_LN14Lexer__token_t(&_fx_g12Lexer__COMMA, 0, true, &v_19), _fx_catch_19);
         FX_CALL(_fx_cons_LN14Lexer__token_t(&v_18, v_19, false, &v_19), _fx_catch_19);
         FX_CALL(_fx_cons_LN14Lexer__token_t(&_fx_g12Lexer__EQUAL, v_19, false, &v_19), _fx_catch_19);
         FX_CALL(_fx_cons_LN14Lexer__token_t(&v_17, v_19, false, &v_19), _fx_catch_19);
         if (v_19 == 0) {
            FX_COPY_PTR(params_3, &params_4);
         }
         else if (params_3 == 0) {
            FX_COPY_PTR(v_19, &params_4);
         }
         else {
            _fx_LN14Lexer__token_t v_41 = 0;
            _fx_LN14Lexer__token_t lstend_3 = 0;
            _fx_LN14Lexer__token_t lst_3 = v_19;
            for (; lst_3; lst_3 = lst_3->tl) {
               _fx_N14Lexer__token_t* x_3 = &lst_3->hd;
               _fx_LN14Lexer__token_t node_3 = 0;
               FX_CALL(_fx_cons_LN14Lexer__token_t(x_3, 0, false, &node_3), _fx_catch_6);
               FX_LIST_APPEND(v_41, lstend_3, node_3);

            _fx_catch_6: ;
               FX_CHECK_EXN(_fx_catch_7);
            }
            _fx_M5LexerFM5link2LN14Lexer__token_t2LN14Lexer__token_tLN14Lexer__token_t(v_41, params_3, &params_4, 0);

         _fx_catch_7: ;
            if (v_41) {
               _fx_free_LN14Lexer__token_t(&v_41);
            }
         }
         FX_CHECK_EXN(_fx_catch_19);
      }
      _fx_M3AstFM7LitCharN10Ast__lit_t1C(sign_0, &v_20);
      if (sign_0 == (char_)45) {
         FX_COPY_PTR(params_4, &params_5);
      }
      else {
         fx_str_t slit_5 = FX_MAKE_STR("sign");
         _fx_M5LexerFM5IDENTN14Lexer__token_t2BS(true, &slit_5, &v_21);
         _fx_M5LexerFM7LITERALN14Lexer__token_t1N10Ast__lit_t(&v_20, &v_22);
         FX_CALL(_fx_cons_LN14Lexer__token_t(&_fx_g12Lexer__COMMA, 0, true, &v_23), _fx_catch_19);
         FX_CALL(_fx_cons_LN14Lexer__token_t(&v_22, v_23, false, &v_23), _fx_catch_19);
         FX_CALL(_fx_cons_LN14Lexer__token_t(&_fx_g12Lexer__EQUAL, v_23, false, &v_23), _fx_catch_19);
         FX_CALL(_fx_cons_LN14Lexer__token_t(&v_21, v_23, false, &v_23), _fx_catch_19);
         if (v_23 == 0) {
            FX_COPY_PTR(params_4, &params_5);
         }
         else if (params_4 == 0) {
            FX_COPY_PTR(v_23, &params_5);
         }
         else {
            _fx_LN14Lexer__token_t v_42 = 0;
            _fx_LN14Lexer__token_t lstend_4 = 0;
            _fx_LN14Lexer__token_t lst_4 = v_23;
            for (; lst_4; lst_4 = lst_4->tl) {
               _fx_N14Lexer__token_t* x_4 = &lst_4->hd;
               _fx_LN14Lexer__token_t node_4 = 0;
               FX_CALL(_fx_cons_LN14Lexer__token_t(x_4, 0, false, &node_4), _fx_catch_8);
               FX_LIST_APPEND(v_42, lstend_4, node_4);

            _fx_catch_8: ;
               FX_CHECK_EXN(_fx_catch_9);
            }
            _fx_M5LexerFM5link2LN14Lexer__token_t2LN14Lexer__token_tLN14Lexer__token_t(v_42, params_4, &params_5, 0);

         _fx_catch_9: ;
            if (v_42) {
               _fx_free_LN14Lexer__token_t(&v_42);
            }
         }
         FX_CHECK_EXN(_fx_catch_19);
      }
      _fx_M3AstFM7LitCharN10Ast__lit_t1C(align_0, &v_24);
      if (align_0 == (char_)45) {
         FX_COPY_PTR(params_5, &params_6);
      }
      else {
         fx_str_t slit_6 = FX_MAKE_STR("align");
         _fx_M5LexerFM5IDENTN14Lexer__token_t2BS(true, &slit_6, &v_25);
         _fx_M5LexerFM7LITERALN14Lexer__token_t1N10Ast__lit_t(&v_24, &v_26);
         FX_CALL(_fx_cons_LN14Lexer__token_t(&_fx_g12Lexer__COMMA, 0, true, &v_27), _fx_catch_19);
         FX_CALL(_fx_cons_LN14Lexer__token_t(&v_26, v_27, false, &v_27), _fx_catch_19);
         FX_CALL(_fx_cons_LN14Lexer__token_t(&_fx_g12Lexer__EQUAL, v_27, false, &v_27), _fx_catch_19);
         FX_CALL(_fx_cons_LN14Lexer__token_t(&v_25, v_27, false, &v_27), _fx_catch_19);
         if (v_27 == 0) {
            FX_COPY_PTR(params_5, &params_6);
         }
         else if (params_5 == 0) {
            FX_COPY_PTR(v_27, &params_6);
         }
         else {
            _fx_LN14Lexer__token_t v_43 = 0;
            _fx_LN14Lexer__token_t lstend_5 = 0;
            _fx_LN14Lexer__token_t lst_5 = v_27;
            for (; lst_5; lst_5 = lst_5->tl) {
               _fx_N14Lexer__token_t* x_5 = &lst_5->hd;
               _fx_LN14Lexer__token_t node_5 = 0;
               FX_CALL(_fx_cons_LN14Lexer__token_t(x_5, 0, false, &node_5), _fx_catch_10);
               FX_LIST_APPEND(v_43, lstend_5, node_5);

            _fx_catch_10: ;
               FX_CHECK_EXN(_fx_catch_11);
            }
            _fx_M5LexerFM5link2LN14Lexer__token_t2LN14Lexer__token_tLN14Lexer__token_t(v_43, params_5, &params_6, 0);

         _fx_catch_11: ;
            if (v_43) {
               _fx_free_LN14Lexer__token_t(&v_43);
            }
         }
         FX_CHECK_EXN(_fx_catch_19);
      }
      _fx_M3AstFM7LitCharN10Ast__lit_t1C(fill_0, &v_28);
      if (fill_0 == (char_)32) {
         FX_COPY_PTR(params_6, &params_7);
      }
      else {
         fx_str_t slit_7 = FX_MAKE_STR("fill");
         _fx_M5LexerFM5IDENTN14Lexer__token_t2BS(true, &slit_7, &v_29);
         _fx_M5LexerFM7LITERALN14Lexer__token_t1N10Ast__lit_t(&v_28, &v_30);
         FX_CALL(_fx_cons_LN14Lexer__token_t(&_fx_g12Lexer__COMMA, 0, true, &v_31), _fx_catch_19);
         FX_CALL(_fx_cons_LN14Lexer__token_t(&v_30, v_31, false, &v_31), _fx_catch_19);
         FX_CALL(_fx_cons_LN14Lexer__token_t(&_fx_g12Lexer__EQUAL, v_31, false, &v_31), _fx_catch_19);
         FX_CALL(_fx_cons_LN14Lexer__token_t(&v_29, v_31, false, &v_31), _fx_catch_19);
         if (v_31 == 0) {
            FX_COPY_PTR(params_6, &params_7);
         }
         else if (params_6 == 0) {
            FX_COPY_PTR(v_31, &params_7);
         }
         else {
            _fx_LN14Lexer__token_t v_44 = 0;
            _fx_LN14Lexer__token_t lstend_6 = 0;
            _fx_LN14Lexer__token_t lst_6 = v_31;
            for (; lst_6; lst_6 = lst_6->tl) {
               _fx_N14Lexer__token_t* x_6 = &lst_6->hd;
               _fx_LN14Lexer__token_t node_6 = 0;
               FX_CALL(_fx_cons_LN14Lexer__token_t(x_6, 0, false, &node_6), _fx_catch_12);
               FX_LIST_APPEND(v_44, lstend_6, node_6);

            _fx_catch_12: ;
               FX_CHECK_EXN(_fx_catch_13);
            }
            _fx_M5LexerFM5link2LN14Lexer__token_t2LN14Lexer__token_tLN14Lexer__token_t(v_44, params_6, &params_7, 0);

         _fx_catch_13: ;
            if (v_44) {
               _fx_free_LN14Lexer__token_t(&v_44);
            }
         }
         FX_CHECK_EXN(_fx_catch_19);
      }
      if (params_7 != 0) {
         fx_str_t slit_8 = FX_MAKE_STR("format_t");
         _fx_M5LexerFM5IDENTN14Lexer__token_t2BS(true, &slit_8, &v_32);
         FX_CALL(_fx_cons_LN14Lexer__token_t(&_fx_g13Lexer__LBRACE, 0, true, &v_33), _fx_catch_19);
         FX_CALL(_fx_cons_LN14Lexer__token_t(&v_32, v_33, false, &v_33), _fx_catch_19);
         FX_CALL(_fx_cons_LN14Lexer__token_t(&_fx_g12Lexer__COMMA, v_33, false, &v_33), _fx_catch_19);
         FX_CALL(_fx_cons_LN14Lexer__token_t(&_fx_g13Lexer__RBRACE, 0, true, &v_34), _fx_catch_19);
         if (params_7 == 0) {
            FX_COPY_PTR(v_34, &v_35);
         }
         else if (v_34 == 0) {
            FX_COPY_PTR(params_7, &v_35);
         }
         else {
            _fx_LN14Lexer__token_t v_45 = 0;
            _fx_LN14Lexer__token_t lstend_7 = 0;
            _fx_LN14Lexer__token_t lst_7 = params_7;
            for (; lst_7; lst_7 = lst_7->tl) {
               _fx_N14Lexer__token_t* x_7 = &lst_7->hd;
               _fx_LN14Lexer__token_t node_7 = 0;
               FX_CALL(_fx_cons_LN14Lexer__token_t(x_7, 0, false, &node_7), _fx_catch_14);
               FX_LIST_APPEND(v_45, lstend_7, node_7);

            _fx_catch_14: ;
               FX_CHECK_EXN(_fx_catch_15);
            }
            _fx_M5LexerFM5link2LN14Lexer__token_t2LN14Lexer__token_tLN14Lexer__token_t(v_45, v_34, &v_35, 0);

         _fx_catch_15: ;
            if (v_45) {
               _fx_free_LN14Lexer__token_t(&v_45);
            }
         }
         FX_CHECK_EXN(_fx_catch_19);
         if (v_33 == 0) {
            FX_COPY_PTR(v_35, &v_36);
         }
         else if (v_35 == 0) {
            FX_COPY_PTR(v_33, &v_36);
         }
         else {
            _fx_LN14Lexer__token_t v_46 = 0;
            _fx_LN14Lexer__token_t lstend_8 = 0;
            _fx_LN14Lexer__token_t lst_8 = v_33;
            for (; lst_8; lst_8 = lst_8->tl) {
               _fx_N14Lexer__token_t* x_8 = &lst_8->hd;
               _fx_LN14Lexer__token_t node_8 = 0;
               FX_CALL(_fx_cons_LN14Lexer__token_t(x_8, 0, false, &node_8), _fx_catch_16);
               FX_LIST_APPEND(v_46, lstend_8, node_8);

            _fx_catch_16: ;
               FX_CHECK_EXN(_fx_catch_17);
            }
            _fx_M5LexerFM5link2LN14Lexer__token_t2LN14Lexer__token_tLN14Lexer__token_t(v_46, v_35, &v_36, 0);

         _fx_catch_17: ;
            if (v_46) {
               _fx_free_LN14Lexer__token_t(&v_46);
            }
         }
         FX_CHECK_EXN(_fx_catch_19);
         _fx_LT2N14Lexer__token_tTa2i lstend_9 = 0;
         _fx_LN14Lexer__token_t lst_9 = v_36;
         for (; lst_9; lst_9 = lst_9->tl) {
            _fx_T2N14Lexer__token_tTa2i tup_0 = {0};
            _fx_N14Lexer__token_t* t_0 = &lst_9->hd;
            _fx_make_T2N14Lexer__token_tTa2i(t_0, loc_0, &tup_0);
            _fx_LT2N14Lexer__token_tTa2i node_9 = 0;
            FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&tup_0, 0, false, &node_9), _fx_catch_18);
            FX_LIST_APPEND(*fx_result, lstend_9, node_9);

         _fx_catch_18: ;
            _fx_free_T2N14Lexer__token_tTa2i(&tup_0);
            FX_CHECK_EXN(_fx_catch_19);
         }
      }

   _fx_catch_19: ;
      if (v_36) {
         _fx_free_LN14Lexer__token_t(&v_36);
      }
      if (v_35) {
         _fx_free_LN14Lexer__token_t(&v_35);
      }
      if (v_34) {
         _fx_free_LN14Lexer__token_t(&v_34);
      }
      if (v_33) {
         _fx_free_LN14Lexer__token_t(&v_33);
      }
      _fx_free_N14Lexer__token_t(&v_32);
      if (v_31) {
         _fx_free_LN14Lexer__token_t(&v_31);
      }
      _fx_free_N14Lexer__token_t(&v_30);
      _fx_free_N14Lexer__token_t(&v_29);
      if (params_7) {
         _fx_free_LN14Lexer__token_t(&params_7);
      }
      _fx_free_N10Ast__lit_t(&v_28);
      if (v_27) {
         _fx_free_LN14Lexer__token_t(&v_27);
      }
      _fx_free_N14Lexer__token_t(&v_26);
      _fx_free_N14Lexer__token_t(&v_25);
      if (params_6) {
         _fx_free_LN14Lexer__token_t(&params_6);
      }
      _fx_free_N10Ast__lit_t(&v_24);
      if (v_23) {
         _fx_free_LN14Lexer__token_t(&v_23);
      }
      _fx_free_N14Lexer__token_t(&v_22);
      _fx_free_N14Lexer__token_t(&v_21);
      if (params_5) {
         _fx_free_LN14Lexer__token_t(&params_5);
      }
      _fx_free_N10Ast__lit_t(&v_20);
      if (v_19) {
         _fx_free_LN14Lexer__token_t(&v_19);
      }
      _fx_free_N14Lexer__token_t(&v_18);
      _fx_free_N14Lexer__token_t(&v_17);
      if (params_4) {
         _fx_free_LN14Lexer__token_t(&params_4);
      }
      _fx_free_N10Ast__lit_t(&v_16);
      if (v_15) {
         _fx_free_LN14Lexer__token_t(&v_15);
      }
      _fx_free_N14Lexer__token_t(&v_14);
      _fx_free_N14Lexer__token_t(&v_13);
      if (params_3) {
         _fx_free_LN14Lexer__token_t(&params_3);
      }
      _fx_free_N10Ast__lit_t(&v_12);
      if (v_11) {
         _fx_free_LN14Lexer__token_t(&v_11);
      }
      _fx_free_N14Lexer__token_t(&v_10);
      _fx_free_N14Lexer__token_t(&v_9);
      if (params_2) {
         _fx_free_LN14Lexer__token_t(&params_2);
      }
      _fx_free_N10Ast__lit_t(&v_8);
      if (v_7) {
         _fx_free_LN14Lexer__token_t(&v_7);
      }
      _fx_free_N14Lexer__token_t(&v_6);
      _fx_free_N14Lexer__token_t(&v_5);
      if (params_1) {
         _fx_free_LN14Lexer__token_t(&params_1);
      }
      _fx_free_N10Ast__lit_t(&v_4);
      if (v_3) {
         _fx_free_LN14Lexer__token_t(&v_3);
      }
      _fx_free_N14Lexer__token_t(&v_2);
      _fx_free_N14Lexer__token_t(&v_1);
      if (params_0) {
         _fx_free_LN14Lexer__token_t(&params_0);
      }
      _fx_free_N10Ast__lit_t(&v_0);
   }
   return fx_status;
}

FX_EXTERN_C int _fx_M5LexerFM10make_lexerFPLT2N14Lexer__token_tTa2i01N20LexerUtils__stream_t(
   struct _fx_N20LexerUtils__stream_t_data_t* strm_0,
   struct _fx_FPLT2N14Lexer__token_tTa2i0* fx_result,
   void* fx_fv)
{
   _fx_rB new_exp_ref_0 = 0;
   _fx_rLT2N14Lexer__token_tTa2i paren_stack_ref_0 = 0;
   _fx_ri pos_ref_0 = 0;
   _fx_rB prev_dot_ref_0 = 0;
   _fx_ri backquote_pos_ref_0 = 0;
   _fx_rTa2i backquote_loc_ref_0 = 0;
   _fx_rNt6option1R8format_t fmt_ref_0 = 0;
   int fx_status = 0;
   FX_CALL(_fx_make_rB(true, &new_exp_ref_0), _fx_cleanup);
   FX_CALL(_fx_make_rLT2N14Lexer__token_tTa2i(0, &paren_stack_ref_0), _fx_cleanup);
   FX_CALL(_fx_make_ri(strm_0->u.stream_t.t2, &pos_ref_0), _fx_cleanup);
   FX_CALL(_fx_make_rB(false, &prev_dot_ref_0), _fx_cleanup);
   FX_CALL(_fx_make_ri(-1, &backquote_pos_ref_0), _fx_cleanup);
   _fx_Ta2i backquote_loc_arg_0 = { 0, 0 };
   FX_CALL(_fx_make_rTa2i(&backquote_loc_arg_0, &backquote_loc_ref_0), _fx_cleanup);
   FX_CALL(_fx_make_rNt6option1R8format_t(&_fx_g13Lexer__None1_, &fmt_ref_0), _fx_cleanup);
   _fx_M5LexerFM7make_fpFPLT2N14Lexer__token_tTa2i08rTa2irirNt6option1R8format_trBrLT2N14Lexer__token_tTa2irirBN20LexerUtils__stream_t(
      backquote_loc_ref_0, backquote_pos_ref_0, fmt_ref_0, new_exp_ref_0, paren_stack_ref_0, pos_ref_0, prev_dot_ref_0, strm_0,
      fx_result);

_fx_cleanup: ;
   FX_FREE_REF_SIMPLE(&new_exp_ref_0);
   if (paren_stack_ref_0) {
      _fx_free_rLT2N14Lexer__token_tTa2i(&paren_stack_ref_0);
   }
   FX_FREE_REF_SIMPLE(&pos_ref_0);
   FX_FREE_REF_SIMPLE(&prev_dot_ref_0);
   FX_FREE_REF_SIMPLE(&backquote_pos_ref_0);
   FX_FREE_REF_SIMPLE(&backquote_loc_ref_0);
   FX_FREE_REF_SIMPLE(&fmt_ref_0);
   return fx_status;
}

static int _fx_M5LexerFM6getlocTa2i2iN20LexerUtils__stream_t(
   int_ pos_0,
   struct _fx_N20LexerUtils__stream_t_data_t* strm_0,
   struct _fx_Ta2i* fx_result,
   void* fx_fv)
{
   int fx_status = 0;
   _fx_Ta2i tup_0 = { strm_0->u.stream_t.t1, fx_maxi(pos_0 - strm_0->u.stream_t.t2, 0) + 1 };
   *fx_result = tup_0;
   return fx_status;
}

static int _fx_M5LexerFM8lloc2strS2Ta2iN20LexerUtils__stream_t(
   struct _fx_Ta2i* l_0,
   struct _fx_N20LexerUtils__stream_t_data_t* strm_0,
   fx_str_t* fx_result,
   void* fx_fv)
{
   fx_str_t colspec_0 = {0};
   fx_str_t v_0 = {0};
   fx_str_t v_1 = {0};
   fx_str_t v_2 = {0};
   int fx_status = 0;
   if (l_0->t1 == 1) {
      fx_str_t slit_0 = FX_MAKE_STR(""); fx_copy_str(&slit_0, &colspec_0);
   }
   else {
      FX_CALL(_fx_F6stringS1i(l_0->t1, &v_0, 0), _fx_cleanup);
      fx_str_t slit_1 = FX_MAKE_STR(":");
      {
         const fx_str_t strs_0[] = { slit_1, v_0 };
         FX_CALL(fx_strjoin(0, 0, 0, strs_0, 2, &colspec_0), _fx_cleanup);
      }
   }
   fx_copy_str(&strm_0->u.stream_t.t0, &v_1);
   FX_CALL(_fx_F6stringS1i(l_0->t0, &v_2, 0), _fx_cleanup);
   fx_str_t slit_2 = FX_MAKE_STR(":");
   {
      const fx_str_t strs_1[] = { v_1, slit_2, v_2, colspec_0 };
      FX_CALL(fx_strjoin(0, 0, 0, strs_1, 4, fx_result), _fx_cleanup);
   }

_fx_cleanup: ;
   FX_FREE_STR(&colspec_0);
   FX_FREE_STR(&v_0);
   FX_FREE_STR(&v_1);
   FX_FREE_STR(&v_2);
   return fx_status;
}

static int _fx_M5LexerFM9get_ccodeT2iS2iN20LexerUtils__stream_t(
   int_ p_0,
   struct _fx_N20LexerUtils__stream_t_data_t* strm_0,
   struct _fx_T2iS* fx_result,
   void* fx_fv)
{
   fx_str_t buf_0 = {0};
   fx_exn_t v_0 = {0};
   fx_str_t v_1 = {0};
   fx_str_t v_2 = {0};
   int fx_status = 0;
   fx_copy_str(&strm_0->u.stream_t.t3, &buf_0);
   int_ len_0 = FX_STR_LENGTH(buf_0);
   int_ lbraces_0 = 1;
   int_ q_0 = p_0;
   while (q_0 < len_0) {
      _fx_T4iSiB v_3 = {0};
      char_ c_0 = FX_STR_ELEM_ZERO(buf_0, q_0);
      int_ v_4 = q_0 + 1;
      char_ c1_0 = FX_STR_ELEM_ZERO(buf_0, v_4);
      bool t_0;
      if (c_0 == (char_)47) {
         if (c1_0 == (char_)47) {
            t_0 = true;
         }
         else {
            t_0 = c1_0 == (char_)42;
         }
      }
      else {
         t_0 = false;
      }
      bool t_1;
      if (t_0) {
         t_1 = true;
      }
      else {
         t_1 = c_0 == (char_)10;
      }
      bool t_2;
      if (t_1) {
         t_2 = true;
      }
      else {
         t_2 = c_0 == (char_)13;
      }
      if (t_2) {
         _fx_T3CiB v_5;
         FX_CALL(_fx_M10LexerUtilsFM11skip_spacesT3CiB3N20LexerUtils__stream_tiB(strm_0, q_0, false, &v_5, 0), _fx_catch_1);
         q_0 = v_5.t1;
      }
      else {
         bool t_3;
         if (c_0 == (char_)34) {
            t_3 = true;
         }
         else {
            t_3 = c_0 == (char_)39;
         }
         if (t_3) {
            _fx_Ta2i v_6 = { strm_0->u.stream_t.t1, fx_maxi(q_0 + 1 - strm_0->u.stream_t.t2, 0) + 1 };
            FX_CALL(_fx_M10LexerUtilsFM9getstringT4iSiB6SiTa2iCBB(&buf_0, q_0 + 1, &v_6, c_0, true, false, &v_3, 0),
               _fx_catch_1);
            int_ q__0 = v_3.t0;
            int_ dl_0 = v_3.t2;
            strm_0->u.stream_t.t1 = strm_0->u.stream_t.t1 + dl_0;
            q_0 = q__0;
         }
         else {
            q_0 = q_0 + 1;
            char_ c_1 = c_0;
            if (c_1 == (char_)123) {
               lbraces_0 = lbraces_0 + 1;
            }
            else if (c_1 == (char_)125) {
               lbraces_0 = lbraces_0 - 1;
               if (lbraces_0 == 0) {
                  FX_BREAK(_fx_catch_0);
               }

            _fx_catch_0: ;
            }
            FX_CHECK_EXN(_fx_catch_1);
         }
      }

   _fx_catch_1: ;
      _fx_free_T4iSiB(&v_3);
      FX_CHECK_BREAK();
      FX_CHECK_EXN(_fx_cleanup);
   }
   if (lbraces_0 > 0) {
      _fx_Ta2i v_7 = { strm_0->u.stream_t.t1, fx_maxi(p_0 - strm_0->u.stream_t.t2, 0) + 1 };
      fx_str_t slit_0 = FX_MAKE_STR("unterminated ccode block (check braces)");
      FX_CALL(_fx_M10LexerUtilsFM15make_LexerErrorE2Ta2iS(&v_7, &slit_0, &v_0), _fx_cleanup);
      FX_THROW(&v_0, true, _fx_cleanup);
   }
   FX_CALL(fx_substr(&buf_0, p_0, q_0 - 1, 1, 0, &v_1), _fx_cleanup);
   FX_CALL(_fx_M6StringFM4copyS1S(&v_1, &v_2, 0), _fx_cleanup);
   _fx_make_T2iS(q_0, &v_2, fx_result);

_fx_cleanup: ;
   FX_FREE_STR(&buf_0);
   fx_free_exn(&v_0);
   FX_FREE_STR(&v_1);
   FX_FREE_STR(&v_2);
   return fx_status;
}

static int _fx_M5LexerFM10nexttokensLT2N14Lexer__token_tTa2i0(
   struct _fx_LT2N14Lexer__token_tTa2i_data_t** fx_result,
   void* fx_fv)
{
   _fx_LT2N14Lexer__token_tTa2i result_0 = 0;
   int fx_status = 0;
   FX_CALL(fx_check_stack(), _fx_cleanup);
   _fx_M5LexerFM10nexttokensLT2N14Lexer__token_tTa2i0_cldata_t* cv_0 =
      (_fx_M5LexerFM10nexttokensLT2N14Lexer__token_tTa2i0_cldata_t*)fx_fv;
   _fx_N20LexerUtils__stream_t strm_0 = cv_0->t7;
   _fx_Ta2i* backquote_loc_0 = &cv_0->t0->data;
   int_* backquote_pos_0 = &cv_0->t1->data;
   _fx_Nt6option1R8format_t* fmt_0 = &cv_0->t2->data;
   bool* new_exp_0 = &cv_0->t3->data;
   _fx_LT2N14Lexer__token_tTa2i* paren_stack_0 = &cv_0->t4->data;
   int_* pos_0 = &cv_0->t5->data;
   bool* prev_dot_0 = &cv_0->t6->data;
   for (;;) {
      fx_str_t buf_0 = {0};
      _fx_LT2N14Lexer__token_tTa2i paren_stack_1 = 0;
      _fx_T2iT2N14Lexer__token_tC v_0 = {0};
      _fx_N14Lexer__token_t t_0 = {0};
      _fx_N14Lexer__token_t v_1 = {0};
      _fx_T2N14Lexer__token_tTa2i v_2 = {0};
      _fx_N14Lexer__token_t v_3 = {0};
      _fx_T2N14Lexer__token_tTa2i v_4 = {0};
      _fx_T2N14Lexer__token_tTa2i v_5 = {0};
      _fx_T2N14Lexer__token_tTa2i v_6 = {0};
      _fx_LT2N14Lexer__token_tTa2i v_7 = 0;
      _fx_T2N14Lexer__token_tTa2i v_8 = {0};
      _fx_LT2N14Lexer__token_tTa2i result_1 = 0;
      _fx_T2N14Lexer__token_tTa2i v_9 = {0};
      _fx_LT2N14Lexer__token_tTa2i result_2 = 0;
      fx_str_t v_10 = {0};
      fx_str_t tyvar_0 = {0};
      _fx_N14Lexer__token_t v_11 = {0};
      _fx_T2N14Lexer__token_tTa2i v_12 = {0};
      _fx_LT2N14Lexer__token_tTa2i result_3 = 0;
      _fx_T4iSiB v_13 = {0};
      fx_str_t res_0 = {0};
      fx_exn_t v_14 = {0};
      _fx_N10Ast__lit_t v_15 = {0};
      _fx_N14Lexer__token_t v_16 = {0};
      _fx_T2N14Lexer__token_tTa2i v_17 = {0};
      _fx_LT2N14Lexer__token_tTa2i result_4 = 0;
      _fx_T2N14Lexer__token_tTa2i v_18 = {0};
      _fx_LT2N14Lexer__token_tTa2i v_19 = 0;
      _fx_LN14Lexer__token_t v_20 = 0;
      _fx_N14Lexer__token_t v_21 = {0};
      _fx_N14Lexer__token_t v_22 = {0};
      _fx_N10Ast__lit_t v_23 = {0};
      _fx_N14Lexer__token_t v_24 = {0};
      _fx_N14Lexer__token_t v_25 = {0};
      _fx_LN14Lexer__token_t v_26 = 0;
      _fx_N14Lexer__token_t v_27 = {0};
      _fx_N14Lexer__token_t v_28 = {0};
      _fx_LN14Lexer__token_t v_29 = 0;
      _fx_LN14Lexer__token_t v_30 = 0;
      _fx_LT2N14Lexer__token_tTa2i result_5 = 0;
      _fx_N10Ast__lit_t v_31 = {0};
      _fx_N14Lexer__token_t v_32 = {0};
      _fx_T2N14Lexer__token_tTa2i v_33 = {0};
      _fx_LT2N14Lexer__token_tTa2i result_6 = 0;
      fx_str_t v_34 = {0};
      fx_str_t ident_0 = {0};
      _fx_Nt6option1T2N14Lexer__token_ti v_35 = {0};
      fx_copy_str(&strm_0->u.stream_t.t3, &buf_0);
      int_ len_0;
      FX_CALL(_fx_M5LexerFM6lengthi1S(&buf_0, &len_0, 0), _fx_catch_63);
      char_ c_0 = FX_STR_ELEM_ZERO(buf_0, *pos_0);
      int_ v_36 = *pos_0 + 1;
      char_ c1_0 = FX_STR_ELEM_ZERO(buf_0, v_36);
      bool v_37;
      if (_fx_M4CharFM7isspaceB1C(c_0, 0)) {
         v_37 = true;
      }
      else if (c_0 == (char_)47) {
         if (c1_0 == (char_)47) {
            v_37 = true;
         }
         else {
            v_37 = c1_0 == (char_)42;
         }
      }
      else {
         v_37 = false;
      }
      if (v_37) {
         _fx_T3CiB v_38;
         FX_CALL(_fx_M10LexerUtilsFM11skip_spacesT3CiB3N20LexerUtils__stream_tiB(strm_0, *pos_0, true, &v_38, 0), _fx_catch_63);
         char_ c__0 = v_38.t0;
         int_ p_0 = v_38.t1;
         bool nl_0 = v_38.t2;
         c_0 = c__0;
         if (nl_0) {
            FX_COPY_PTR(*paren_stack_0, &paren_stack_1);
            bool res_1;
            if (paren_stack_1 != 0) {
               if (paren_stack_1->hd.t0.tag == 44) {
                  res_1 = true; goto _fx_endmatch_0;
               }
            }
            if (paren_stack_1 != 0) {
               if (paren_stack_1->hd.t0.tag == 47) {
                  res_1 = true; goto _fx_endmatch_0;
               }
            }
            res_1 = false;

         _fx_endmatch_0: ;
            FX_CHECK_EXN(_fx_catch_63);
            if (res_1) {
               goto _fx_endmatch_1;
            }
            *new_exp_0 = true;

         _fx_endmatch_1: ;
            FX_CHECK_EXN(_fx_catch_63);
         }
         *pos_0 = p_0;
         int_ v_39 = *pos_0 + 1;
         c1_0 = FX_STR_ELEM_ZERO(buf_0, v_39);
      }
      _fx_Ta2i loc_0;
      FX_CALL(_fx_M5LexerFM6getlocTa2i2iN20LexerUtils__stream_t(*pos_0, strm_0, &loc_0, 0), _fx_catch_63);
      if ((bool)(((char_)48 <= c_0) & (c_0 <= (char_)57))) {
         FX_CALL(_fx_M5LexerFM9getnumberT2iT2N14Lexer__token_tC4SiTa2iB(&buf_0, *pos_0, &loc_0, *prev_dot_0, &v_0, 0),
            _fx_catch_63);
         int_ p_1 = v_0.t0;
         _fx_T2N14Lexer__token_tC* v_40 = &v_0.t1;
         _fx_copy_N14Lexer__token_t(&v_40->t0, &t_0);
         char_ c_1 = v_40->t1;
         *new_exp_0 = false;
         *prev_dot_0 = false;
         *pos_0 = p_1;
         if (c_1 == (char_)108) {
            fx_str_t slit_0 = FX_MAKE_STR("long");
            _fx_M5LexerFM5IDENTN14Lexer__token_t2BS(true, &slit_0, &v_1);
            _fx_make_T2N14Lexer__token_tTa2i(&v_1, &loc_0, &v_2);
            _fx_M5LexerFM6LPARENN14Lexer__token_t1B(false, &v_3);
            _fx_make_T2N14Lexer__token_tTa2i(&v_3, &loc_0, &v_4);
            _fx_make_T2N14Lexer__token_tTa2i(&t_0, &loc_0, &v_5);
            _fx_make_T2N14Lexer__token_tTa2i(&_fx_g13Lexer__RPAREN, &loc_0, &v_6);
            FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_6, 0, true, &v_7), _fx_catch_63);
            FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_5, v_7, false, &v_7), _fx_catch_63);
            FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_4, v_7, false, &v_7), _fx_catch_63);
            FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_2, v_7, false, &v_7), _fx_catch_63);
            _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
            FX_COPY_PTR(v_7, &result_0);
            FX_BREAK(_fx_catch_63);
         }
         else {
            _fx_make_T2N14Lexer__token_tTa2i(&t_0, &loc_0, &v_8);
            FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_8, 0, true, &result_1), _fx_catch_63);
            _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
            FX_COPY_PTR(result_1, &result_0);
            FX_BREAK(_fx_catch_63);
         }
      }
      else {
         bool t_1;
         if (c_0 == (char_)39) {
            t_1 = !*new_exp_0;
         }
         else {
            t_1 = false;
         }
         if (t_1) {
            *prev_dot_0 = false;
            *pos_0 = *pos_0 + 1;
            _fx_make_T2N14Lexer__token_tTa2i(&_fx_g11Lexer__APOS, &loc_0, &v_9);
            FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_9, 0, true, &result_2), _fx_catch_63);
            _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
            FX_COPY_PTR(result_2, &result_0);
            FX_BREAK(_fx_catch_63);
         }
         else {
            bool v_41;
            bool t_2;
            if (c_0 == (char_)39) {
               t_2 = _fx_M4CharFM7isalphaB1C(c1_0, 0);
            }
            else {
               t_2 = false;
            }
            if (t_2) {
               int_ v_42 = *pos_0 + 2; v_41 = FX_STR_ELEM_ZERO(buf_0, v_42) != (char_)39;
            }
            else {
               v_41 = false;
            }
            if (v_41) {
               int_ p_2 = *pos_0 + 1;
               while (p_2 < len_0) {
                  FX_STR_CHKIDX(buf_0, p_2, _fx_catch_0);
                  char_ cp_0 = FX_STR_ELEM(buf_0, p_2);
                  bool v_43 = _fx_M4CharFM7isalnumB1C(cp_0, 0);
                  bool t_3;
                  if (!v_43) {
                     t_3 = cp_0 != (char_)95;
                  }
                  else {
                     t_3 = false;
                  }
                  if (t_3) {
                     FX_BREAK(_fx_catch_0);
                  }
                  p_2 = p_2 + 1;

               _fx_catch_0: ;
                  FX_CHECK_BREAK();
                  FX_CHECK_EXN(_fx_catch_63);
               }
               FX_CALL(fx_substr(&buf_0, *pos_0, p_2, 1, 0, &v_10), _fx_catch_63);
               FX_CALL(_fx_M6StringFM4copyS1S(&v_10, &tyvar_0, 0), _fx_catch_63);
               *pos_0 = p_2;
               *new_exp_0 = false;
               *prev_dot_0 = false;
               _fx_M5LexerFM5TYVARN14Lexer__token_t1S(&tyvar_0, &v_11);
               _fx_make_T2N14Lexer__token_tTa2i(&v_11, &loc_0, &v_12);
               FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_12, 0, true, &result_3), _fx_catch_63);
               _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
               FX_COPY_PTR(result_3, &result_0);
               FX_BREAK(_fx_catch_63);
            }
            else {
               bool t_4;
               if (c_0 == (char_)34) {
                  t_4 = true;
               }
               else {
                  t_4 = c_0 == (char_)39;
               }
               bool t_5;
               if (t_4) {
                  t_5 = true;
               }
               else {
                  bool t_6;
                  if (c_0 == (char_)102) {
                     t_6 = true;
                  }
                  else {
                     t_6 = c_0 == (char_)114;
                  }
                  if (t_6) {
                     t_5 = c1_0 == (char_)34;
                  }
                  else {
                     t_5 = false;
                  }
               }
               if (t_5) {
                  bool t_7;
                  if (c_0 == (char_)102) {
                     t_7 = true;
                  }
                  else {
                     t_7 = c_0 == (char_)114;
                  }
                  int_ termpos_0;
                  if (t_7) {
                     termpos_0 = *pos_0 + 1;
                  }
                  else {
                     termpos_0 = *pos_0;
                  }
                  char_ term_0 = FX_STR_ELEM_ZERO(buf_0, termpos_0);
                  _fx_Ta2i v_44;
                  FX_CALL(_fx_M5LexerFM6getlocTa2i2iN20LexerUtils__stream_t(termpos_0 + 1, strm_0, &v_44, 0), _fx_catch_63);
                  FX_CALL(
                     _fx_M10LexerUtilsFM9getstringT4iSiB6SiTa2iCBB(&buf_0, termpos_0 + 1, &v_44, term_0, c_0 == (char_)114,
                        c_0 == (char_)102, &v_13, 0), _fx_catch_63);
                  int_ p_3 = v_13.t0;
                  fx_copy_str(&v_13.t1, &res_0);
                  int_ dl_0 = v_13.t2;
                  bool inline_exp_0 = v_13.t3;
                  int_ prev_pos_0 = *pos_0;
                  strm_0->u.stream_t.t1 = strm_0->u.stream_t.t1 + dl_0;
                  *pos_0 = p_3;
                  *new_exp_0 = false;
                  *prev_dot_0 = false;
                  if (term_0 == (char_)39) {
                     int_ res_2;
                     FX_CALL(_fx_M5LexerFM6lengthi1S(&res_0, &res_2, 0), _fx_catch_63);
                     if (res_2 != 1) {
                        _fx_Ta2i v_45;
                        FX_CALL(_fx_M5LexerFM6getlocTa2i2iN20LexerUtils__stream_t(*pos_0, strm_0, &v_45, 0), _fx_catch_63);
                        fx_str_t slit_1 = FX_MAKE_STR("character literal should contain exactly one character");
                        FX_CALL(_fx_M10LexerUtilsFM15make_LexerErrorE2Ta2iS(&v_45, &slit_1, &v_14), _fx_catch_63);
                        FX_THROW(&v_14, true, _fx_catch_63);
                     }
                     FX_STR_CHKIDX(res_0, 0, _fx_catch_63);
                     _fx_M3AstFM7LitCharN10Ast__lit_t1C(FX_STR_ELEM(res_0, 0), &v_15);
                     _fx_M5LexerFM7LITERALN14Lexer__token_t1N10Ast__lit_t(&v_15, &v_16);
                     _fx_make_T2N14Lexer__token_tTa2i(&v_16, &loc_0, &v_17);
                     FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_17, 0, true, &result_4), _fx_catch_63);
                     _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                     FX_COPY_PTR(result_4, &result_0);
                     FX_BREAK(_fx_catch_63);
                  }
                  else if (inline_exp_0) {
                     _fx_Ta2i v_46;
                     FX_CALL(_fx_M5LexerFM6getlocTa2i2iN20LexerUtils__stream_t(prev_pos_0, strm_0, &v_46, 0), _fx_catch_63);
                     _fx_make_T2N14Lexer__token_tTa2i(&_fx_g24Lexer__STR_INTERP_LPAREN, &v_46, &v_18);
                     FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_18, *paren_stack_0, true, &v_19), _fx_catch_63);
                     _fx_free_LT2N14Lexer__token_tTa2i(paren_stack_0);
                     FX_COPY_PTR(v_19, paren_stack_0);
                     *new_exp_0 = true;
                     *fmt_0 = _fx_g13Lexer__None1_;
                     if (FX_STR_LENGTH(res_0) == 0) {
                        _fx_M5LexerFM6LPARENN14Lexer__token_t1B(true, &v_21);
                        FX_CALL(_fx_cons_LN14Lexer__token_t(&v_21, 0, true, &v_20), _fx_catch_63);
                     }
                     else {
                        _fx_M5LexerFM6LPARENN14Lexer__token_t1B(true, &v_22);
                        _fx_M3AstFM9LitStringN10Ast__lit_t1S(&res_0, &v_23);
                        _fx_M5LexerFM7LITERALN14Lexer__token_t1N10Ast__lit_t(&v_23, &v_24);
                        _fx_M5LexerFM4PLUSN14Lexer__token_t1B(false, &v_25);
                        FX_CALL(_fx_cons_LN14Lexer__token_t(&v_25, 0, true, &v_26), _fx_catch_63);
                        FX_CALL(_fx_cons_LN14Lexer__token_t(&v_24, v_26, false, &v_26), _fx_catch_63);
                        FX_CALL(_fx_cons_LN14Lexer__token_t(&v_22, v_26, true, &v_20), _fx_catch_63);
                     }
                     fx_str_t slit_2 = FX_MAKE_STR("string");
                     _fx_M5LexerFM5IDENTN14Lexer__token_t2BS(true, &slit_2, &v_27);
                     _fx_M5LexerFM6LPARENN14Lexer__token_t1B(false, &v_28);
                     FX_CALL(_fx_cons_LN14Lexer__token_t(&v_28, 0, true, &v_29), _fx_catch_63);
                     FX_CALL(_fx_cons_LN14Lexer__token_t(&v_27, v_29, false, &v_29), _fx_catch_63);
                     FX_CALL(_fx_M5LexerFM7__add__LN14Lexer__token_t2LN14Lexer__token_tLN14Lexer__token_t(v_20, v_29, &v_30, 0),
                        _fx_catch_63);
                     FX_CALL(_fx_M5LexerFM6addlocLT2N14Lexer__token_tTa2i2Ta2iLN14Lexer__token_t(&loc_0, v_30, &result_5, 0),
                        _fx_catch_63);
                     _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                     FX_COPY_PTR(result_5, &result_0);
                     FX_BREAK(_fx_catch_63);
                  }
                  else {
                     _fx_M3AstFM9LitStringN10Ast__lit_t1S(&res_0, &v_31);
                     _fx_M5LexerFM7LITERALN14Lexer__token_t1N10Ast__lit_t(&v_31, &v_32);
                     _fx_make_T2N14Lexer__token_tTa2i(&v_32, &loc_0, &v_33);
                     FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_33, 0, true, &result_6), _fx_catch_63);
                     _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                     FX_COPY_PTR(result_6, &result_0);
                     FX_BREAK(_fx_catch_63);
                  }
               }
               else {
                  bool v_47;
                  bool t_8;
                  if (_fx_M4CharFM7isalphaB1C(c_0, 0)) {
                     t_8 = true;
                  }
                  else {
                     t_8 = c_0 == (char_)95;
                  }
                  if (t_8) {
                     v_47 = true;
                  }
                  else if (c_0 == (char_)64) {
                     v_47 = _fx_M4CharFM7isalphaB1C(c1_0, 0);
                  }
                  else {
                     v_47 = false;
                  }
                  if (v_47) {
                     int_ p_4 = *pos_0 + 1;
                     while (p_4 < len_0) {
                        FX_STR_CHKIDX(buf_0, p_4, _fx_catch_1);
                        char_ cp_1 = FX_STR_ELEM(buf_0, p_4);
                        bool v_48 = _fx_M4CharFM7isalnumB1C(cp_1, 0);
                        bool t_9;
                        if (!v_48) {
                           t_9 = cp_1 != (char_)95;
                        }
                        else {
                           t_9 = false;
                        }
                        if (t_9) {
                           FX_BREAK(_fx_catch_1);
                        }
                        p_4 = p_4 + 1;

                     _fx_catch_1: ;
                        FX_CHECK_BREAK();
                        FX_CHECK_EXN(_fx_catch_63);
                     }
                     FX_CALL(fx_substr(&buf_0, *pos_0, p_4, 1, 0, &v_34), _fx_catch_63);
                     FX_CALL(_fx_M6StringFM4copyS1S(&v_34, &ident_0, 0), _fx_catch_63);
                     *pos_0 = p_4;
                     *prev_dot_0 = false;
                     FX_CALL(
                        _fx_M5LexerFM8find_optNt6option1T2N14Lexer__token_ti2Nt10Hashmap__t2ST2N14Lexer__token_tiS(
                           _fx_g21Lexer__ficus_keywords, &ident_0, &v_35, 0), _fx_catch_63);
                     if (v_35.tag == 2) {
                        _fx_N14Lexer__token_t t_10 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_49 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_7 = 0;
                        _fx_T2N14Lexer__token_ti* v_50 = &v_35.u.Some;
                        int_ n_0 = v_50->t1;
                        _fx_N14Lexer__token_t* t_11 = &v_50->t0;
                        if (t_11->tag == 9) {
                           _fx_T2N14Lexer__token_tTa2i v_51 = {0};
                           _fx_LT2N14Lexer__token_tTa2i v_52 = 0;
                           fx_str_t slit_3 = FX_MAKE_STR("ccode");
                           FX_CALL(_fx_M5LexerFM8check_nev3BTa2iS(*new_exp_0, &loc_0, &slit_3, 0), _fx_catch_2);
                           _fx_make_T2N14Lexer__token_tTa2i(&_fx_g12Lexer__CCODE, &loc_0, &v_51);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_51, *paren_stack_0, true, &v_52), _fx_catch_2);
                           _fx_free_LT2N14Lexer__token_tTa2i(paren_stack_0);
                           FX_COPY_PTR(v_52, paren_stack_0);
                           *new_exp_0 = true;
                           _fx_copy_N14Lexer__token_t(t_11, &t_10);

                        _fx_catch_2: ;
                           if (v_52) {
                              _fx_free_LT2N14Lexer__token_tTa2i(&v_52);
                           }
                           _fx_free_T2N14Lexer__token_tTa2i(&v_51);
                        }
                        else if (t_11->tag == 19) {
                           _fx_N14Lexer__token_t t_12 = {0};
                           _fx_M5LexerFM3FORN14Lexer__token_t1B(*new_exp_0, &t_12);
                           *new_exp_0 = true;
                           _fx_copy_N14Lexer__token_t(&t_12, &t_10);
                           _fx_free_N14Lexer__token_t(&t_12);
                        }
                        else if (t_11->tag == 23) {
                           _fx_N14Lexer__token_t t_13 = {0};
                           _fx_M5LexerFM6IMPORTN14Lexer__token_t1B(*new_exp_0, &t_13);
                           *new_exp_0 = true;
                           _fx_copy_N14Lexer__token_t(&t_13, &t_10);
                           _fx_free_N14Lexer__token_t(&t_13);
                        }
                        else if (t_11->tag == 42) {
                           _fx_N14Lexer__token_t t_14 = {0};
                           _fx_M5LexerFM5WHILEN14Lexer__token_t1B(*new_exp_0, &t_14);
                           *new_exp_0 = true;
                           _fx_copy_N14Lexer__token_t(&t_14, &t_10);
                           _fx_free_N14Lexer__token_t(&t_14);
                        }
                        else if (t_11->tag == 26) {
                           _fx_T2N14Lexer__token_tTa2i v_53 = {0};
                           _fx_LT2N14Lexer__token_tTa2i v_54 = 0;
                           _fx_make_T2N14Lexer__token_tTa2i(&_fx_g12Lexer__MATCH, &loc_0, &v_53);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_53, *paren_stack_0, true, &v_54), _fx_catch_3);
                           _fx_free_LT2N14Lexer__token_tTa2i(paren_stack_0);
                           FX_COPY_PTR(v_54, paren_stack_0);
                           *new_exp_0 = true;
                           _fx_copy_N14Lexer__token_t(t_11, &t_10);

                        _fx_catch_3: ;
                           if (v_54) {
                              _fx_free_LT2N14Lexer__token_tTa2i(&v_54);
                           }
                           _fx_free_T2N14Lexer__token_tTa2i(&v_53);
                        }
                        else if (t_11->tag == 33) {
                           _fx_M5LexerFM3REFN14Lexer__token_t1B(*new_exp_0, &t_10);
                        }
                        else if (t_11->tag == 100) {
                           *new_exp_0 = false; _fx_copy_N14Lexer__token_t(t_11, &t_10);
                        }
                        else if (t_11->tag == 34) {
                           _fx_LT2N14Lexer__token_tTa2i paren_stack_2 = 0;
                           c_0 = FX_STR_ELEM_ZERO(buf_0, *pos_0);
                           int_ v_55 = *pos_0 + 1;
                           c1_0 = FX_STR_ELEM_ZERO(buf_0, v_55);
                           bool v_56;
                           if (_fx_M4CharFM7isspaceB1C(c_0, 0)) {
                              v_56 = true;
                           }
                           else if (c_0 == (char_)47) {
                              if (c1_0 == (char_)47) {
                                 v_56 = true;
                              }
                              else {
                                 v_56 = c1_0 == (char_)42;
                              }
                           }
                           else {
                              v_56 = false;
                           }
                           bool may_have_arg_0;
                           if (v_56) {
                              _fx_T3CiB v_57;
                              FX_CALL(
                                 _fx_M10LexerUtilsFM11skip_spacesT3CiB3N20LexerUtils__stream_tiB(strm_0, *pos_0, true, &v_57,
                                    0), _fx_catch_4);
                              char_ c__1 = v_57.t0;
                              int_ p_5 = v_57.t1;
                              bool nl_1 = v_57.t2;
                              c_0 = c__1;
                              *pos_0 = p_5;
                              if (nl_1) {
                                 FX_COPY_PTR(*paren_stack_0, &paren_stack_2);
                                 bool res_3;
                                 if (paren_stack_2 != 0) {
                                    if (paren_stack_2->hd.t0.tag == 44) {
                                       res_3 = true; goto _fx_endmatch_2;
                                    }
                                 }
                                 if (paren_stack_2 != 0) {
                                    if (paren_stack_2->hd.t0.tag == 47) {
                                       res_3 = true; goto _fx_endmatch_2;
                                    }
                                 }
                                 res_3 = false;

                              _fx_endmatch_2: ;
                                 FX_CHECK_EXN(_fx_catch_4);
                                 if (res_3) {
                                    may_have_arg_0 = true; goto _fx_endmatch_3;
                                 }
                                 may_have_arg_0 = false;

                              _fx_endmatch_3: ;
                                 FX_CHECK_EXN(_fx_catch_4);
                              }
                              else {
                                 may_have_arg_0 = true;
                              }
                           }
                           else {
                              may_have_arg_0 = true;
                           }
                           *new_exp_0 = true;
                           bool t_15;
                           if (may_have_arg_0) {
                              t_15 = c_0 != (char_)59;
                           }
                           else {
                              t_15 = false;
                           }
                           _fx_M5LexerFM6RETURNN14Lexer__token_t1B(t_15, &t_10);

                        _fx_catch_4: ;
                           if (paren_stack_2) {
                              _fx_free_LT2N14Lexer__token_tTa2i(&paren_stack_2);
                           }
                        }
                        else if (n_0 == -1) {
                           fx_str_t v_58 = {0};
                           fx_str_t v_59 = {0};
                           fx_exn_t v_60 = {0};
                           FX_CALL(_fx_M5LexerFM6stringS1S(&ident_0, &v_58, 0), _fx_catch_5);
                           fx_str_t slit_4 = FX_MAKE_STR("Identifier \'");
                           fx_str_t slit_5 = FX_MAKE_STR("\' is reserved and cannot be used");
                           {
                              const fx_str_t strs_0[] = { slit_4, v_58, slit_5 };
                              FX_CALL(fx_strjoin(0, 0, 0, strs_0, 3, &v_59), _fx_catch_5);
                           }
                           FX_CALL(_fx_M10LexerUtilsFM15make_LexerErrorE2Ta2iS(&loc_0, &v_59, &v_60), _fx_catch_5);
                           FX_THROW(&v_60, true, _fx_catch_5);

                        _fx_catch_5: ;
                           fx_free_exn(&v_60);
                           FX_FREE_STR(&v_59);
                           FX_FREE_STR(&v_58);
                        }
                        else if (n_0 == 0) {
                           FX_CALL(_fx_M5LexerFM8check_nev3BTa2iS(*new_exp_0, &loc_0, &ident_0, 0), _fx_catch_6);
                           *new_exp_0 = false;
                           _fx_copy_N14Lexer__token_t(t_11, &t_10);

                        _fx_catch_6: ;
                        }
                        else if (n_0 == 1) {
                           *new_exp_0 = true; _fx_copy_N14Lexer__token_t(t_11, &t_10);
                        }
                        else if (n_0 == 2) {
                           FX_CALL(_fx_M5LexerFM8check_nev3BTa2iS(*new_exp_0, &loc_0, &ident_0, 0), _fx_catch_7);
                           *new_exp_0 = true;
                           _fx_copy_N14Lexer__token_t(t_11, &t_10);

                        _fx_catch_7: ;
                        }
                        else {
                           fx_str_t v_61 = {0};
                           fx_str_t v_62 = {0};
                           fx_exn_t v_63 = {0};
                           FX_CALL(_fx_M5LexerFM6stringS1S(&ident_0, &v_61, 0), _fx_catch_8);
                           fx_str_t slit_6 = FX_MAKE_STR("Unexpected keyword \'");
                           fx_str_t slit_7 = FX_MAKE_STR("\'");
                           {
                              const fx_str_t strs_1[] = { slit_6, v_61, slit_7 };
                              FX_CALL(fx_strjoin(0, 0, 0, strs_1, 3, &v_62), _fx_catch_8);
                           }
                           FX_CALL(_fx_M10LexerUtilsFM15make_LexerErrorE2Ta2iS(&loc_0, &v_62, &v_63), _fx_catch_8);
                           FX_THROW(&v_63, true, _fx_catch_8);

                        _fx_catch_8: ;
                           fx_free_exn(&v_63);
                           FX_FREE_STR(&v_62);
                           FX_FREE_STR(&v_61);
                        }
                        FX_CHECK_EXN(_fx_catch_9);
                        _fx_make_T2N14Lexer__token_tTa2i(&t_10, &loc_0, &v_49);
                        FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_49, 0, true, &result_7), _fx_catch_9);
                        _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                        FX_COPY_PTR(result_7, &result_0);
                        FX_BREAK(_fx_catch_9);

                     _fx_catch_9: ;
                        if (result_7) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_7);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_49);
                        _fx_free_N14Lexer__token_t(&t_10);
                     }
                     else {
                        fx_str_t v_64 = {0};
                        _fx_N14Lexer__token_t t_16 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_65 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_66 = {0};
                        _fx_LT2N14Lexer__token_tTa2i v_67 = 0;
                        _fx_N14Lexer__token_t t_17 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_68 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_8 = 0;
                        if (c_0 == (char_)64) {
                           FX_CALL(fx_substr(&ident_0, 1, 0, 1, 2, &v_64), _fx_catch_10);
                           _fx_M5LexerFM5IDENTN14Lexer__token_t2BS(*new_exp_0, &v_64, &t_16);
                           *new_exp_0 = false;
                           _fx_make_T2N14Lexer__token_tTa2i(&_fx_g9Lexer__AT, &loc_0, &v_65);
                           _fx_Ta2i v_69;
                           FX_CALL(_fx_M5LexerFM6getlocTa2i2iN20LexerUtils__stream_t(*pos_0 + 1, strm_0, &v_69, 0),
                              _fx_catch_10);
                           _fx_make_T2N14Lexer__token_tTa2i(&t_16, &v_69, &v_66);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_66, 0, true, &v_67), _fx_catch_10);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_65, v_67, false, &v_67), _fx_catch_10);
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                           FX_COPY_PTR(v_67, &result_0);
                           FX_BREAK(_fx_catch_10);
                        }
                        else {
                           _fx_M5LexerFM5IDENTN14Lexer__token_t2BS(*new_exp_0, &ident_0, &t_17);
                           *new_exp_0 = false;
                           _fx_make_T2N14Lexer__token_tTa2i(&t_17, &loc_0, &v_68);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_68, 0, true, &result_8), _fx_catch_10);
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                           FX_COPY_PTR(result_8, &result_0);
                           FX_BREAK(_fx_catch_10);
                        }

                     _fx_catch_10: ;
                        if (result_8) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_8);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_68);
                        _fx_free_N14Lexer__token_t(&t_17);
                        if (v_67) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&v_67);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_66);
                        _fx_free_T2N14Lexer__token_tTa2i(&v_65);
                        _fx_free_N14Lexer__token_t(&t_16);
                        FX_FREE_STR(&v_64);
                     }
                     FX_CHECK_EXN(_fx_catch_63);
                  }
                  else {
                     bool prev_ne_0 = *new_exp_0;
                     *prev_dot_0 = false;
                     *new_exp_0 = true;
                     int_ res_4;
                     FX_CALL(_fx_M5LexerFM3mini2ii(*pos_0 + 1, len_0, &res_4, 0), _fx_catch_63);
                     *pos_0 = res_4;
                     int_ v_70 = *pos_0 + 1;
                     char_ c2_0 = FX_STR_ELEM_ZERO(buf_0, v_70);
                     int_ v_71 = *pos_0 + 2;
                     char_ c3_0 = FX_STR_ELEM_ZERO(buf_0, v_71);
                     char_ c_2 = c_0;
                     if (c_2 == (char_)40) {
                        _fx_N14Lexer__token_t v_72 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_73 = {0};
                        _fx_LT2N14Lexer__token_tTa2i v_74 = 0;
                        _fx_N14Lexer__token_t v_75 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_76 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_9 = 0;
                        _fx_M5LexerFM6LPARENN14Lexer__token_t1B(prev_ne_0, &v_72);
                        _fx_Ta2i v_77;
                        FX_CALL(_fx_M5LexerFM6getlocTa2i2iN20LexerUtils__stream_t(*pos_0 - 1, strm_0, &v_77, 0), _fx_catch_11);
                        _fx_make_T2N14Lexer__token_tTa2i(&v_72, &v_77, &v_73);
                        FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_73, *paren_stack_0, true, &v_74), _fx_catch_11);
                        _fx_free_LT2N14Lexer__token_tTa2i(paren_stack_0);
                        FX_COPY_PTR(v_74, paren_stack_0);
                        _fx_M5LexerFM6LPARENN14Lexer__token_t1B(prev_ne_0, &v_75);
                        _fx_make_T2N14Lexer__token_tTa2i(&v_75, &loc_0, &v_76);
                        FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_76, 0, true, &result_9), _fx_catch_11);
                        _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                        FX_COPY_PTR(result_9, &result_0);
                        FX_BREAK(_fx_catch_11);

                     _fx_catch_11: ;
                        if (result_9) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_9);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_76);
                        _fx_free_N14Lexer__token_t(&v_75);
                        if (v_74) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&v_74);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_73);
                        _fx_free_N14Lexer__token_t(&v_72);
                     }
                     else if (c_2 == (char_)41) {
                        _fx_LT2N14Lexer__token_tTa2i paren_stack_3 = 0;
                        *new_exp_0 = false;
                        FX_COPY_PTR(*paren_stack_0, &paren_stack_3);
                        if (paren_stack_3 != 0) {
                           if (paren_stack_3->hd.t0.tag == 44) {
                              _fx_T2N14Lexer__token_tTa2i v_78 = {0};
                              _fx_LT2N14Lexer__token_tTa2i result_10 = 0;
                              _fx_LT2N14Lexer__token_tTa2i* rest_0 = &paren_stack_3->tl;
                              _fx_free_LT2N14Lexer__token_tTa2i(paren_stack_0);
                              FX_COPY_PTR(*rest_0, paren_stack_0);
                              _fx_make_T2N14Lexer__token_tTa2i(&_fx_g13Lexer__RPAREN, &loc_0, &v_78);
                              FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_78, 0, true, &result_10), _fx_catch_12);
                              _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                              FX_COPY_PTR(result_10, &result_0);
                              FX_BREAK(_fx_catch_12);

                           _fx_catch_12: ;
                              if (result_10) {
                                 _fx_free_LT2N14Lexer__token_tTa2i(&result_10);
                              }
                              _fx_free_T2N14Lexer__token_tTa2i(&v_78);
                              goto _fx_endmatch_4;
                           }
                        }
                        fx_exn_t v_79 = {0};
                        fx_str_t slit_8 = FX_MAKE_STR("Unexpected \')\', check parens");
                        FX_CALL(_fx_M10LexerUtilsFM15make_LexerErrorE2Ta2iS(&loc_0, &slit_8, &v_79), _fx_catch_13);
                        FX_THROW(&v_79, true, _fx_catch_13);

                     _fx_catch_13: ;
                        fx_free_exn(&v_79);

                     _fx_endmatch_4: ;
                        FX_CHECK_EXN(_fx_catch_14);

                     _fx_catch_14: ;
                        if (paren_stack_3) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&paren_stack_3);
                        }
                     }
                     else if (c_2 == (char_)91) {
                        _fx_N14Lexer__token_t v_80 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_81 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_11 = 0;
                        _fx_N14Lexer__token_t v_82 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_83 = {0};
                        _fx_LT2N14Lexer__token_tTa2i v_84 = 0;
                        _fx_N14Lexer__token_t v_85 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_86 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_12 = 0;
                        bool t_18;
                        if (prev_ne_0) {
                           t_18 = c1_0 == (char_)93;
                        }
                        else {
                           t_18 = false;
                        }
                        if (t_18) {
                           *pos_0 = *pos_0 + 1;
                           _fx_M5LexerFM7LITERALN14Lexer__token_t1N10Ast__lit_t(&_fx_g15Lexer__LitEmpty, &v_80);
                           _fx_make_T2N14Lexer__token_tTa2i(&v_80, &loc_0, &v_81);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_81, 0, true, &result_11), _fx_catch_15);
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                           FX_COPY_PTR(result_11, &result_0);
                           FX_BREAK(_fx_catch_15);
                        }
                        else {
                           _fx_M5LexerFM7LSQUAREN14Lexer__token_t1B(prev_ne_0, &v_82);
                           _fx_Ta2i v_87;
                           FX_CALL(_fx_M5LexerFM6getlocTa2i2iN20LexerUtils__stream_t(*pos_0 - 1, strm_0, &v_87, 0),
                              _fx_catch_15);
                           _fx_make_T2N14Lexer__token_tTa2i(&v_82, &v_87, &v_83);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_83, *paren_stack_0, true, &v_84), _fx_catch_15);
                           _fx_free_LT2N14Lexer__token_tTa2i(paren_stack_0);
                           FX_COPY_PTR(v_84, paren_stack_0);
                           _fx_M5LexerFM7LSQUAREN14Lexer__token_t1B(prev_ne_0, &v_85);
                           _fx_make_T2N14Lexer__token_tTa2i(&v_85, &loc_0, &v_86);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_86, 0, true, &result_12), _fx_catch_15);
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                           FX_COPY_PTR(result_12, &result_0);
                           FX_BREAK(_fx_catch_15);
                        }

                     _fx_catch_15: ;
                        if (result_12) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_12);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_86);
                        _fx_free_N14Lexer__token_t(&v_85);
                        if (v_84) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&v_84);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_83);
                        _fx_free_N14Lexer__token_t(&v_82);
                        if (result_11) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_11);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_81);
                        _fx_free_N14Lexer__token_t(&v_80);
                     }
                     else if (c_2 == (char_)93) {
                        _fx_LT2N14Lexer__token_tTa2i paren_stack_4 = 0;
                        *new_exp_0 = false;
                        FX_COPY_PTR(*paren_stack_0, &paren_stack_4);
                        if (paren_stack_4 != 0) {
                           if (paren_stack_4->hd.t0.tag == 47) {
                              _fx_T2N14Lexer__token_tTa2i v_88 = {0};
                              _fx_LT2N14Lexer__token_tTa2i result_13 = 0;
                              _fx_LT2N14Lexer__token_tTa2i* rest_1 = &paren_stack_4->tl;
                              _fx_free_LT2N14Lexer__token_tTa2i(paren_stack_0);
                              FX_COPY_PTR(*rest_1, paren_stack_0);
                              _fx_make_T2N14Lexer__token_tTa2i(&_fx_g14Lexer__RSQUARE, &loc_0, &v_88);
                              FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_88, 0, true, &result_13), _fx_catch_16);
                              _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                              FX_COPY_PTR(result_13, &result_0);
                              FX_BREAK(_fx_catch_16);

                           _fx_catch_16: ;
                              if (result_13) {
                                 _fx_free_LT2N14Lexer__token_tTa2i(&result_13);
                              }
                              _fx_free_T2N14Lexer__token_tTa2i(&v_88);
                              goto _fx_endmatch_5;
                           }
                        }
                        fx_exn_t v_89 = {0};
                        fx_str_t slit_9 = FX_MAKE_STR("Unexpected \']\', check parens");
                        FX_CALL(_fx_M10LexerUtilsFM15make_LexerErrorE2Ta2iS(&loc_0, &slit_9, &v_89), _fx_catch_17);
                        FX_THROW(&v_89, true, _fx_catch_17);

                     _fx_catch_17: ;
                        fx_free_exn(&v_89);

                     _fx_endmatch_5: ;
                        FX_CHECK_EXN(_fx_catch_18);

                     _fx_catch_18: ;
                        if (paren_stack_4) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&paren_stack_4);
                        }
                     }
                     else if (c_2 == (char_)123) {
                        _fx_T2N14Lexer__token_tTa2i v_90 = {0};
                        _fx_LT2N14Lexer__token_tTa2i v_91 = 0;
                        _fx_LT2N14Lexer__token_tTa2i paren_stack_5 = 0;
                        _fx_Ta2i v_92;
                        FX_CALL(_fx_M5LexerFM6getlocTa2i2iN20LexerUtils__stream_t(*pos_0 - 1, strm_0, &v_92, 0), _fx_catch_23);
                        _fx_make_T2N14Lexer__token_tTa2i(&_fx_g13Lexer__LBRACE, &v_92, &v_90);
                        FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_90, *paren_stack_0, true, &v_91), _fx_catch_23);
                        _fx_free_LT2N14Lexer__token_tTa2i(paren_stack_0);
                        FX_COPY_PTR(v_91, paren_stack_0);
                        FX_COPY_PTR(*paren_stack_0, &paren_stack_5);
                        if (paren_stack_5 != 0) {
                           if (paren_stack_5->hd.t0.tag == 49) {
                              _fx_LT2N14Lexer__token_tTa2i v_93 = paren_stack_5->tl;
                              if (v_93 != 0) {
                                 if (v_93->hd.t0.tag == 9) {
                                    _fx_T2iS v_94 = {0};
                                    fx_str_t s_0 = {0};
                                    fx_str_t v_95 = {0};
                                    _fx_N10Ast__lit_t v_96 = {0};
                                    _fx_N14Lexer__token_t v_97 = {0};
                                    _fx_T2N14Lexer__token_tTa2i v_98 = {0};
                                    _fx_LT2N14Lexer__token_tTa2i result_14 = 0;
                                    *new_exp_0 = false;
                                    _fx_LT2N14Lexer__token_tTa2i* rest_2 = &v_93->tl;
                                    _fx_free_LT2N14Lexer__token_tTa2i(paren_stack_0);
                                    FX_COPY_PTR(*rest_2, paren_stack_0);
                                    FX_CALL(_fx_M5LexerFM9get_ccodeT2iS2iN20LexerUtils__stream_t(*pos_0, strm_0, &v_94, 0),
                                       _fx_catch_19);
                                    int_ p_6 = v_94.t0;
                                    fx_copy_str(&v_94.t1, &s_0);
                                    *pos_0 = p_6;
                                    FX_CALL(_fx_M6StringFM5stripS1S(&s_0, &v_95, 0), _fx_catch_19);
                                    _fx_M3AstFM9LitStringN10Ast__lit_t1S(&v_95, &v_96);
                                    _fx_M5LexerFM7LITERALN14Lexer__token_t1N10Ast__lit_t(&v_96, &v_97);
                                    _fx_make_T2N14Lexer__token_tTa2i(&v_97, &loc_0, &v_98);
                                    FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_98, 0, true, &result_14), _fx_catch_19);
                                    _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                                    FX_COPY_PTR(result_14, &result_0);
                                    FX_BREAK(_fx_catch_19);

                                 _fx_catch_19: ;
                                    if (result_14) {
                                       _fx_free_LT2N14Lexer__token_tTa2i(&result_14);
                                    }
                                    _fx_free_T2N14Lexer__token_tTa2i(&v_98);
                                    _fx_free_N14Lexer__token_t(&v_97);
                                    _fx_free_N10Ast__lit_t(&v_96);
                                    FX_FREE_STR(&v_95);
                                    FX_FREE_STR(&s_0);
                                    _fx_free_T2iS(&v_94);
                                    goto _fx_endmatch_7;
                                 }
                              }
                           }
                        }
                        if (paren_stack_5 != 0) {
                           _fx_LT2N14Lexer__token_tTa2i v_99 = paren_stack_5->tl;
                           if (v_99 != 0) {
                              if (v_99->hd.t0.tag == 26) {
                                 _fx_T2N14Lexer__token_tTa2i* v_100 = &paren_stack_5->hd;
                                 if (v_100->t0.tag == 49) {
                                    _fx_T2N14Lexer__token_tTa2i v_101 = {0};
                                    _fx_T2N14Lexer__token_tTa2i v_102 = {0};
                                    _fx_LT2N14Lexer__token_tTa2i v_103 = 0;
                                    _fx_T2N14Lexer__token_tTa2i v_104 = {0};
                                    _fx_LT2N14Lexer__token_tTa2i result_15 = 0;
                                    _fx_Ta2i* l1_0 = &v_100->t1;
                                    _fx_make_T2N14Lexer__token_tTa2i(&_fx_g10Lexer__BAR, l1_0, &v_101);
                                    _fx_make_T2N14Lexer__token_tTa2i(&_fx_g13Lexer__LBRACE, l1_0, &v_102);
                                    FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_102, v_99->tl, true, &v_103), _fx_catch_20);
                                    FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_101, v_103, false, &v_103), _fx_catch_20);
                                    _fx_free_LT2N14Lexer__token_tTa2i(paren_stack_0);
                                    FX_COPY_PTR(v_103, paren_stack_0);
                                    _fx_make_T2N14Lexer__token_tTa2i(&_fx_g13Lexer__LBRACE, l1_0, &v_104);
                                    FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_104, 0, true, &result_15), _fx_catch_20);
                                    _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                                    FX_COPY_PTR(result_15, &result_0);
                                    FX_BREAK(_fx_catch_20);

                                 _fx_catch_20: ;
                                    if (result_15) {
                                       _fx_free_LT2N14Lexer__token_tTa2i(&result_15);
                                    }
                                    _fx_free_T2N14Lexer__token_tTa2i(&v_104);
                                    if (v_103) {
                                       _fx_free_LT2N14Lexer__token_tTa2i(&v_103);
                                    }
                                    _fx_free_T2N14Lexer__token_tTa2i(&v_102);
                                    _fx_free_T2N14Lexer__token_tTa2i(&v_101);
                                    goto _fx_endmatch_7;
                                 }
                              }
                           }
                        }
                        _fx_T2N14Lexer__token_tTa2i v_105 = {0};
                        _fx_LT2N14Lexer__token_tTa2i v_106 = 0;
                        _fx_LT2N14Lexer__token_tTa2i v_107 = 0;
                        _fx_LT2N14Lexer__token_tTa2i result_16 = 0;
                        _fx_make_T2N14Lexer__token_tTa2i(&_fx_g13Lexer__LBRACE, &loc_0, &v_105);
                        FX_CALL(_fx_M5LexerFM10nexttokensLT2N14Lexer__token_tTa2i0(&v_106, fx_fv), _fx_catch_22);
                        if (v_106 != 0) {
                           _fx_T2N14Lexer__token_tTa2i* v_108 = &v_106->hd;
                           if (v_108->t0.tag == 81) {
                              _fx_T2N14Lexer__token_tTa2i v_109 = {0};
                              _fx_LT2N14Lexer__token_tTa2i v_110 = 0;
                              _fx_T2N14Lexer__token_tTa2i v_111 = {0};
                              _fx_Ta2i* p_7 = &v_108->t1;
                              _fx_make_T2N14Lexer__token_tTa2i(&_fx_g10Lexer__BAR, p_7, &v_109);
                              FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_109, *paren_stack_0, true, &v_110), _fx_catch_21);
                              _fx_free_LT2N14Lexer__token_tTa2i(paren_stack_0);
                              FX_COPY_PTR(v_110, paren_stack_0);
                              _fx_make_T2N14Lexer__token_tTa2i(&_fx_g10Lexer__BAR, p_7, &v_111);
                              FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_111, v_106->tl, true, &v_107), _fx_catch_21);

                           _fx_catch_21: ;
                              _fx_free_T2N14Lexer__token_tTa2i(&v_111);
                              if (v_110) {
                                 _fx_free_LT2N14Lexer__token_tTa2i(&v_110);
                              }
                              _fx_free_T2N14Lexer__token_tTa2i(&v_109);
                              goto _fx_endmatch_6;
                           }
                        }
                        FX_COPY_PTR(v_106, &v_107);

                     _fx_endmatch_6: ;
                        FX_CHECK_EXN(_fx_catch_22);
                        FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_105, v_107, true, &result_16), _fx_catch_22);
                        _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                        FX_COPY_PTR(result_16, &result_0);
                        FX_BREAK(_fx_catch_22);

                     _fx_catch_22: ;
                        if (result_16) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_16);
                        }
                        if (v_107) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&v_107);
                        }
                        if (v_106) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&v_106);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_105);

                     _fx_endmatch_7: ;
                        FX_CHECK_EXN(_fx_catch_23);

                     _fx_catch_23: ;
                        if (paren_stack_5) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&paren_stack_5);
                        }
                        if (v_91) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&v_91);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_90);
                     }
                     else if (c_2 == (char_)125) {
                        _fx_LT2N14Lexer__token_tTa2i paren_stack_6 = 0;
                        *new_exp_0 = false;
                        FX_COPY_PTR(*paren_stack_0, &paren_stack_6);
                        if (paren_stack_6 != 0) {
                           if (paren_stack_6->hd.t0.tag == 45) {
                              _fx_T4iSiB v_112 = {0};
                              fx_str_t s_1 = {0};
                              _fx_LT2N14Lexer__token_tTa2i v_113 = 0;
                              _fx_LT2N14Lexer__token_tTa2i v_114 = 0;
                              _fx_T2N14Lexer__token_tTa2i v_115 = {0};
                              _fx_T2N14Lexer__token_tTa2i v_116 = {0};
                              _fx_N14Lexer__token_t v_117 = {0};
                              _fx_T2N14Lexer__token_tTa2i v_118 = {0};
                              _fx_N10Ast__lit_t v_119 = {0};
                              _fx_N14Lexer__token_t v_120 = {0};
                              _fx_T2N14Lexer__token_tTa2i v_121 = {0};
                              _fx_LT2N14Lexer__token_tTa2i v_122 = 0;
                              _fx_LT2N14Lexer__token_tTa2i v_123 = 0;
                              _fx_T2N14Lexer__token_tTa2i v_124 = {0};
                              _fx_LT2N14Lexer__token_tTa2i v_125 = 0;
                              _fx_N14Lexer__token_t v_126 = {0};
                              _fx_T2N14Lexer__token_tTa2i v_127 = {0};
                              _fx_N14Lexer__token_t v_128 = {0};
                              _fx_T2N14Lexer__token_tTa2i v_129 = {0};
                              _fx_N14Lexer__token_t v_130 = {0};
                              _fx_T2N14Lexer__token_tTa2i v_131 = {0};
                              _fx_LT2N14Lexer__token_tTa2i v_132 = 0;
                              _fx_T2N14Lexer__token_tTa2i v_133 = {0};
                              _fx_LT2N14Lexer__token_tTa2i v_134 = 0;
                              _fx_LT2N14Lexer__token_tTa2i result_17 = 0;
                              _fx_LT2N14Lexer__token_tTa2i* rest_3 = &paren_stack_6->tl;
                              _fx_free_LT2N14Lexer__token_tTa2i(paren_stack_0);
                              FX_COPY_PTR(*rest_3, paren_stack_0);
                              _fx_Ta2i v_135;
                              FX_CALL(_fx_M5LexerFM6getlocTa2i2iN20LexerUtils__stream_t(*pos_0, strm_0, &v_135, 0),
                                 _fx_catch_24);
                              char_ res_5;
                              FX_CALL(_fx_F3chrC1i(34, &res_5, 0), _fx_catch_24);
                              FX_CALL(
                                 _fx_M10LexerUtilsFM9getstringT4iSiB6SiTa2iCBB(&buf_0, *pos_0, &v_135, res_5, false, true,
                                    &v_112, 0), _fx_catch_24);
                              int_ p_8 = v_112.t0;
                              fx_copy_str(&v_112.t1, &s_1);
                              int_ dl_1 = v_112.t2;
                              bool inline_exp_1 = v_112.t3;
                              strm_0->u.stream_t.t1 = strm_0->u.stream_t.t1 + dl_1;
                              *pos_0 = p_8;
                              FX_CALL(
                                 _fx_M5LexerFM10fmt2tokensLT2N14Lexer__token_tTa2i2Nt6option1R8format_tTa2i(fmt_0, &loc_0,
                                    &v_113, 0), _fx_catch_24);
                              if (FX_STR_LENGTH(s_1) == 0) {
                                 _fx_make_T2N14Lexer__token_tTa2i(&_fx_g13Lexer__RPAREN, &loc_0, &v_115);
                                 FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_115, 0, true, &v_114), _fx_catch_24);
                              }
                              else {
                                 _fx_make_T2N14Lexer__token_tTa2i(&_fx_g13Lexer__RPAREN, &loc_0, &v_116);
                                 _fx_M5LexerFM4PLUSN14Lexer__token_t1B(false, &v_117);
                                 _fx_make_T2N14Lexer__token_tTa2i(&v_117, &loc_0, &v_118);
                                 _fx_M3AstFM9LitStringN10Ast__lit_t1S(&s_1, &v_119);
                                 _fx_M5LexerFM7LITERALN14Lexer__token_t1N10Ast__lit_t(&v_119, &v_120);
                                 _fx_make_T2N14Lexer__token_tTa2i(&v_120, &loc_0, &v_121);
                                 FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_121, 0, true, &v_122), _fx_catch_24);
                                 FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_118, v_122, false, &v_122), _fx_catch_24);
                                 FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_116, v_122, true, &v_114), _fx_catch_24);
                              }
                              if (inline_exp_1) {
                                 *new_exp_0 = true;
                                 _fx_Ta2i v_136;
                                 FX_CALL(_fx_M5LexerFM6getlocTa2i2iN20LexerUtils__stream_t(*pos_0, strm_0, &v_136, 0),
                                    _fx_catch_24);
                                 _fx_make_T2N14Lexer__token_tTa2i(&_fx_g24Lexer__STR_INTERP_LPAREN, &v_136, &v_124);
                                 FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_124, *paren_stack_0, true, &v_125), _fx_catch_24);
                                 _fx_free_LT2N14Lexer__token_tTa2i(paren_stack_0);
                                 FX_COPY_PTR(v_125, paren_stack_0);
                                 _fx_M5LexerFM4PLUSN14Lexer__token_t1B(false, &v_126);
                                 _fx_make_T2N14Lexer__token_tTa2i(&v_126, &loc_0, &v_127);
                                 fx_str_t slit_10 = FX_MAKE_STR("string");
                                 _fx_M5LexerFM5IDENTN14Lexer__token_t2BS(true, &slit_10, &v_128);
                                 _fx_make_T2N14Lexer__token_tTa2i(&v_128, &loc_0, &v_129);
                                 _fx_M5LexerFM6LPARENN14Lexer__token_t1B(false, &v_130);
                                 _fx_make_T2N14Lexer__token_tTa2i(&v_130, &loc_0, &v_131);
                                 FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_131, 0, true, &v_132), _fx_catch_24);
                                 FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_129, v_132, false, &v_132), _fx_catch_24);
                                 FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_127, v_132, true, &v_123), _fx_catch_24);
                              }
                              else {
                                 _fx_make_T2N14Lexer__token_tTa2i(&_fx_g13Lexer__RPAREN, &loc_0, &v_133);
                                 FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_133, 0, true, &v_123), _fx_catch_24);
                              }
                              FX_CALL(
                                 _fx_M5LexerFM7__add__LT2N14Lexer__token_tTa2i2LT2N14Lexer__token_tTa2iLT2N14Lexer__token_tTa2i(
                                    v_114, v_123, &v_134, 0), _fx_catch_24);
                              FX_CALL(
                                 _fx_M5LexerFM7__add__LT2N14Lexer__token_tTa2i2LT2N14Lexer__token_tTa2iLT2N14Lexer__token_tTa2i(
                                    v_113, v_134, &result_17, 0), _fx_catch_24);
                              _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                              FX_COPY_PTR(result_17, &result_0);
                              FX_BREAK(_fx_catch_24);

                           _fx_catch_24: ;
                              if (result_17) {
                                 _fx_free_LT2N14Lexer__token_tTa2i(&result_17);
                              }
                              if (v_134) {
                                 _fx_free_LT2N14Lexer__token_tTa2i(&v_134);
                              }
                              _fx_free_T2N14Lexer__token_tTa2i(&v_133);
                              if (v_132) {
                                 _fx_free_LT2N14Lexer__token_tTa2i(&v_132);
                              }
                              _fx_free_T2N14Lexer__token_tTa2i(&v_131);
                              _fx_free_N14Lexer__token_t(&v_130);
                              _fx_free_T2N14Lexer__token_tTa2i(&v_129);
                              _fx_free_N14Lexer__token_t(&v_128);
                              _fx_free_T2N14Lexer__token_tTa2i(&v_127);
                              _fx_free_N14Lexer__token_t(&v_126);
                              if (v_125) {
                                 _fx_free_LT2N14Lexer__token_tTa2i(&v_125);
                              }
                              _fx_free_T2N14Lexer__token_tTa2i(&v_124);
                              if (v_123) {
                                 _fx_free_LT2N14Lexer__token_tTa2i(&v_123);
                              }
                              if (v_122) {
                                 _fx_free_LT2N14Lexer__token_tTa2i(&v_122);
                              }
                              _fx_free_T2N14Lexer__token_tTa2i(&v_121);
                              _fx_free_N14Lexer__token_t(&v_120);
                              _fx_free_N10Ast__lit_t(&v_119);
                              _fx_free_T2N14Lexer__token_tTa2i(&v_118);
                              _fx_free_N14Lexer__token_t(&v_117);
                              _fx_free_T2N14Lexer__token_tTa2i(&v_116);
                              _fx_free_T2N14Lexer__token_tTa2i(&v_115);
                              if (v_114) {
                                 _fx_free_LT2N14Lexer__token_tTa2i(&v_114);
                              }
                              if (v_113) {
                                 _fx_free_LT2N14Lexer__token_tTa2i(&v_113);
                              }
                              FX_FREE_STR(&s_1);
                              _fx_free_T4iSiB(&v_112);
                              goto _fx_endmatch_8;
                           }
                        }
                        if (paren_stack_6 != 0) {
                           if (paren_stack_6->hd.t0.tag == 55) {
                              _fx_LT2N14Lexer__token_tTa2i v_137 = paren_stack_6->tl;
                              if (v_137 != 0) {
                                 if (v_137->hd.t0.tag == 49) {
                                    _fx_T2N14Lexer__token_tTa2i v_138 = {0};
                                    _fx_LT2N14Lexer__token_tTa2i result_18 = 0;
                                    _fx_LT2N14Lexer__token_tTa2i* rest_4 = &v_137->tl;
                                    _fx_free_LT2N14Lexer__token_tTa2i(paren_stack_0);
                                    FX_COPY_PTR(*rest_4, paren_stack_0);
                                    _fx_make_T2N14Lexer__token_tTa2i(&_fx_g13Lexer__RBRACE, &loc_0, &v_138);
                                    FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_138, 0, true, &result_18), _fx_catch_25);
                                    _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                                    FX_COPY_PTR(result_18, &result_0);
                                    FX_BREAK(_fx_catch_25);

                                 _fx_catch_25: ;
                                    if (result_18) {
                                       _fx_free_LT2N14Lexer__token_tTa2i(&result_18);
                                    }
                                    _fx_free_T2N14Lexer__token_tTa2i(&v_138);
                                    goto _fx_endmatch_8;
                                 }
                              }
                           }
                        }
                        if (paren_stack_6 != 0) {
                           if (paren_stack_6->hd.t0.tag == 49) {
                              _fx_T2N14Lexer__token_tTa2i v_139 = {0};
                              _fx_LT2N14Lexer__token_tTa2i result_19 = 0;
                              _fx_LT2N14Lexer__token_tTa2i* rest_5 = &paren_stack_6->tl;
                              _fx_free_LT2N14Lexer__token_tTa2i(paren_stack_0);
                              FX_COPY_PTR(*rest_5, paren_stack_0);
                              _fx_make_T2N14Lexer__token_tTa2i(&_fx_g13Lexer__RBRACE, &loc_0, &v_139);
                              FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_139, 0, true, &result_19), _fx_catch_26);
                              _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                              FX_COPY_PTR(result_19, &result_0);
                              FX_BREAK(_fx_catch_26);

                           _fx_catch_26: ;
                              if (result_19) {
                                 _fx_free_LT2N14Lexer__token_tTa2i(&result_19);
                              }
                              _fx_free_T2N14Lexer__token_tTa2i(&v_139);
                              goto _fx_endmatch_8;
                           }
                        }
                        fx_exn_t v_140 = {0};
                        fx_str_t slit_11 = FX_MAKE_STR("Unexpected \'}\', check parens");
                        FX_CALL(_fx_M10LexerUtilsFM15make_LexerErrorE2Ta2iS(&loc_0, &slit_11, &v_140), _fx_catch_27);
                        FX_THROW(&v_140, true, _fx_catch_27);

                     _fx_catch_27: ;
                        fx_free_exn(&v_140);

                     _fx_endmatch_8: ;
                        FX_CHECK_EXN(_fx_catch_28);

                     _fx_catch_28: ;
                        if (paren_stack_6) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&paren_stack_6);
                        }
                     }
                     else if (c_2 == (char_)124) {
                        _fx_N14Lexer__token_t v_141 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_142 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_20 = 0;
                        _fx_T2N14Lexer__token_tTa2i v_143 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_21 = 0;
                        _fx_LT2N14Lexer__token_tTa2i paren_stack_7 = 0;
                        if (c1_0 == (char_)61) {
                           *pos_0 = *pos_0 + 1;
                           _fx_M5LexerFM9AUG_BINOPN14Lexer__token_t1N13Ast__binary_t(_fx_g18Lexer__OpBitwiseOr, &v_141);
                           _fx_make_T2N14Lexer__token_tTa2i(&v_141, &loc_0, &v_142);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_142, 0, true, &result_20), _fx_catch_31);
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                           FX_COPY_PTR(result_20, &result_0);
                           FX_BREAK(_fx_catch_31);
                        }
                        else if (c1_0 == (char_)124) {
                           *pos_0 = *pos_0 + 1;
                           _fx_make_T2N14Lexer__token_tTa2i(&_fx_g17Lexer__LOGICAL_OR, &loc_0, &v_143);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_143, 0, true, &result_21), _fx_catch_31);
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                           FX_COPY_PTR(result_21, &result_0);
                           FX_BREAK(_fx_catch_31);
                        }
                        else {
                           FX_COPY_PTR(*paren_stack_0, &paren_stack_7);
                           if (paren_stack_7 != 0) {
                              _fx_LT2N14Lexer__token_tTa2i v_144 = paren_stack_7->tl;
                              if (v_144 != 0) {
                                 if (paren_stack_7->hd.t0.tag == 55) {
                                    if (v_144->hd.t0.tag == 49) {
                                       _fx_T2N14Lexer__token_tTa2i v_145 = {0};
                                       _fx_LT2N14Lexer__token_tTa2i result_22 = 0;
                                       _fx_make_T2N14Lexer__token_tTa2i(&_fx_g10Lexer__BAR, &loc_0, &v_145);
                                       FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_145, 0, true, &result_22), _fx_catch_29);
                                       _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                                       FX_COPY_PTR(result_22, &result_0);
                                       FX_BREAK(_fx_catch_29);

                                    _fx_catch_29: ;
                                       if (result_22) {
                                          _fx_free_LT2N14Lexer__token_tTa2i(&result_22);
                                       }
                                       _fx_free_T2N14Lexer__token_tTa2i(&v_145);
                                       goto _fx_endmatch_9;
                                    }
                                 }
                              }
                           }
                           _fx_T2N14Lexer__token_tTa2i v_146 = {0};
                           _fx_LT2N14Lexer__token_tTa2i result_23 = 0;
                           _fx_make_T2N14Lexer__token_tTa2i(&_fx_g17Lexer__BITWISE_OR, &loc_0, &v_146);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_146, 0, true, &result_23), _fx_catch_30);
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                           FX_COPY_PTR(result_23, &result_0);
                           FX_BREAK(_fx_catch_30);

                        _fx_catch_30: ;
                           if (result_23) {
                              _fx_free_LT2N14Lexer__token_tTa2i(&result_23);
                           }
                           _fx_free_T2N14Lexer__token_tTa2i(&v_146);

                        _fx_endmatch_9: ;
                           FX_CHECK_EXN(_fx_catch_31);
                        }

                     _fx_catch_31: ;
                        if (paren_stack_7) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&paren_stack_7);
                        }
                        if (result_21) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_21);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_143);
                        if (result_20) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_20);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_142);
                        _fx_free_N14Lexer__token_t(&v_141);
                     }
                     else if (c_2 == (char_)43) {
                        _fx_N14Lexer__token_t v_147 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_148 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_24 = 0;
                        _fx_N14Lexer__token_t v_149 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_150 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_25 = 0;
                        if (c1_0 == (char_)61) {
                           *pos_0 = *pos_0 + 1;
                           _fx_M5LexerFM9AUG_BINOPN14Lexer__token_t1N13Ast__binary_t(_fx_g12Lexer__OpAdd, &v_147);
                           _fx_make_T2N14Lexer__token_tTa2i(&v_147, &loc_0, &v_148);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_148, 0, true, &result_24), _fx_catch_32);
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                           FX_COPY_PTR(result_24, &result_0);
                           FX_BREAK(_fx_catch_32);
                        }
                        else {
                           _fx_M5LexerFM4PLUSN14Lexer__token_t1B(prev_ne_0, &v_149);
                           _fx_make_T2N14Lexer__token_tTa2i(&v_149, &loc_0, &v_150);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_150, 0, true, &result_25), _fx_catch_32);
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                           FX_COPY_PTR(result_25, &result_0);
                           FX_BREAK(_fx_catch_32);
                        }

                     _fx_catch_32: ;
                        if (result_25) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_25);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_150);
                        _fx_free_N14Lexer__token_t(&v_149);
                        if (result_24) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_24);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_148);
                        _fx_free_N14Lexer__token_t(&v_147);
                     }
                     else if (c_2 == (char_)45) {
                        _fx_N14Lexer__token_t v_151 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_152 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_26 = 0;
                        _fx_T2N14Lexer__token_tTa2i v_153 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_27 = 0;
                        _fx_N14Lexer__token_t v_154 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_155 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_28 = 0;
                        _fx_LT2N14Lexer__token_tTa2i v_156 = 0;
                        if (c1_0 == (char_)61) {
                           *pos_0 = *pos_0 + 1;
                           _fx_M5LexerFM9AUG_BINOPN14Lexer__token_t1N13Ast__binary_t(_fx_g12Lexer__OpSub, &v_151);
                           _fx_make_T2N14Lexer__token_tTa2i(&v_151, &loc_0, &v_152);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_152, 0, true, &result_26), _fx_catch_37);
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                           FX_COPY_PTR(result_26, &result_0);
                           FX_BREAK(_fx_catch_37);
                        }
                        else if (c1_0 == (char_)62) {
                           *pos_0 = *pos_0 + 1;
                           _fx_make_T2N14Lexer__token_tTa2i(&_fx_g12Lexer__ARROW, &loc_0, &v_153);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_153, 0, true, &result_27), _fx_catch_37);
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                           FX_COPY_PTR(result_27, &result_0);
                           FX_BREAK(_fx_catch_37);
                        }
                        else if (!prev_ne_0) {
                           _fx_M5LexerFM5MINUSN14Lexer__token_t1B(false, &v_154);
                           _fx_make_T2N14Lexer__token_tTa2i(&v_154, &loc_0, &v_155);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_155, 0, true, &result_28), _fx_catch_37);
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                           FX_COPY_PTR(result_28, &result_0);
                           FX_BREAK(_fx_catch_37);
                        }
                        else {
                           FX_CALL(_fx_M5LexerFM10nexttokensLT2N14Lexer__token_tTa2i0(&v_156, fx_fv), _fx_catch_37);
                           if (v_156 != 0) {
                              _fx_N14Lexer__token_t* v_157 = &v_156->hd.t0;
                              if (v_157->tag == 1) {
                                 _fx_N10Ast__lit_t* v_158 = &v_157->u.LITERAL;
                                 if (v_158->tag == 1) {
                                    _fx_N10Ast__lit_t v_159 = {0};
                                    _fx_N14Lexer__token_t v_160 = {0};
                                    _fx_T2N14Lexer__token_tTa2i v_161 = {0};
                                    _fx_LT2N14Lexer__token_tTa2i result_29 = 0;
                                    _fx_M3AstFM6LitIntN10Ast__lit_t1l(-v_158->u.LitInt, &v_159);
                                    _fx_M5LexerFM7LITERALN14Lexer__token_t1N10Ast__lit_t(&v_159, &v_160);
                                    _fx_make_T2N14Lexer__token_tTa2i(&v_160, &loc_0, &v_161);
                                    FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_161, v_156->tl, true, &result_29),
                                       _fx_catch_33);
                                    _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                                    FX_COPY_PTR(result_29, &result_0);
                                    FX_BREAK(_fx_catch_33);

                                 _fx_catch_33: ;
                                    if (result_29) {
                                       _fx_free_LT2N14Lexer__token_tTa2i(&result_29);
                                    }
                                    _fx_free_T2N14Lexer__token_tTa2i(&v_161);
                                    _fx_free_N14Lexer__token_t(&v_160);
                                    _fx_free_N10Ast__lit_t(&v_159);
                                    goto _fx_endmatch_10;
                                 }
                              }
                           }
                           if (v_156 != 0) {
                              _fx_N14Lexer__token_t* v_162 = &v_156->hd.t0;
                              if (v_162->tag == 1) {
                                 _fx_N10Ast__lit_t* v_163 = &v_162->u.LITERAL;
                                 if (v_163->tag == 2) {
                                    _fx_N10Ast__lit_t v_164 = {0};
                                    _fx_N14Lexer__token_t v_165 = {0};
                                    _fx_T2N14Lexer__token_tTa2i v_166 = {0};
                                    _fx_LT2N14Lexer__token_tTa2i result_30 = 0;
                                    _fx_T2il* vcase_0 = &v_163->u.LitSInt;
                                    _fx_M3AstFM7LitSIntN10Ast__lit_t2il(vcase_0->t0, -vcase_0->t1, &v_164);
                                    _fx_M5LexerFM7LITERALN14Lexer__token_t1N10Ast__lit_t(&v_164, &v_165);
                                    _fx_make_T2N14Lexer__token_tTa2i(&v_165, &loc_0, &v_166);
                                    FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_166, v_156->tl, true, &result_30),
                                       _fx_catch_34);
                                    _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                                    FX_COPY_PTR(result_30, &result_0);
                                    FX_BREAK(_fx_catch_34);

                                 _fx_catch_34: ;
                                    if (result_30) {
                                       _fx_free_LT2N14Lexer__token_tTa2i(&result_30);
                                    }
                                    _fx_free_T2N14Lexer__token_tTa2i(&v_166);
                                    _fx_free_N14Lexer__token_t(&v_165);
                                    _fx_free_N10Ast__lit_t(&v_164);
                                    goto _fx_endmatch_10;
                                 }
                              }
                           }
                           if (v_156 != 0) {
                              _fx_N14Lexer__token_t* v_167 = &v_156->hd.t0;
                              if (v_167->tag == 1) {
                                 _fx_N10Ast__lit_t* v_168 = &v_167->u.LITERAL;
                                 if (v_168->tag == 4) {
                                    _fx_N10Ast__lit_t v_169 = {0};
                                    _fx_N14Lexer__token_t v_170 = {0};
                                    _fx_T2N14Lexer__token_tTa2i v_171 = {0};
                                    _fx_LT2N14Lexer__token_tTa2i result_31 = 0;
                                    _fx_T2id* vcase_1 = &v_168->u.LitFloat;
                                    _fx_M3AstFM8LitFloatN10Ast__lit_t2id(vcase_1->t0, -vcase_1->t1, &v_169);
                                    _fx_M5LexerFM7LITERALN14Lexer__token_t1N10Ast__lit_t(&v_169, &v_170);
                                    _fx_make_T2N14Lexer__token_tTa2i(&v_170, &loc_0, &v_171);
                                    FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_171, v_156->tl, true, &result_31),
                                       _fx_catch_35);
                                    _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                                    FX_COPY_PTR(result_31, &result_0);
                                    FX_BREAK(_fx_catch_35);

                                 _fx_catch_35: ;
                                    if (result_31) {
                                       _fx_free_LT2N14Lexer__token_tTa2i(&result_31);
                                    }
                                    _fx_free_T2N14Lexer__token_tTa2i(&v_171);
                                    _fx_free_N14Lexer__token_t(&v_170);
                                    _fx_free_N10Ast__lit_t(&v_169);
                                    goto _fx_endmatch_10;
                                 }
                              }
                           }
                           _fx_N14Lexer__token_t v_172 = {0};
                           _fx_T2N14Lexer__token_tTa2i v_173 = {0};
                           _fx_LT2N14Lexer__token_tTa2i result_32 = 0;
                           _fx_M5LexerFM5MINUSN14Lexer__token_t1B(true, &v_172);
                           _fx_make_T2N14Lexer__token_tTa2i(&v_172, &loc_0, &v_173);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_173, v_156, true, &result_32), _fx_catch_36);
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                           FX_COPY_PTR(result_32, &result_0);
                           FX_BREAK(_fx_catch_36);

                        _fx_catch_36: ;
                           if (result_32) {
                              _fx_free_LT2N14Lexer__token_tTa2i(&result_32);
                           }
                           _fx_free_T2N14Lexer__token_tTa2i(&v_173);
                           _fx_free_N14Lexer__token_t(&v_172);

                        _fx_endmatch_10: ;
                           FX_CHECK_EXN(_fx_catch_37);
                        }

                     _fx_catch_37: ;
                        if (v_156) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&v_156);
                        }
                        if (result_28) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_28);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_155);
                        _fx_free_N14Lexer__token_t(&v_154);
                        if (result_27) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_27);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_153);
                        if (result_26) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_26);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_152);
                        _fx_free_N14Lexer__token_t(&v_151);
                     }
                     else if (c_2 == (char_)42) {
                        _fx_N14Lexer__token_t v_174 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_175 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_33 = 0;
                        _fx_T2N14Lexer__token_tTa2i v_176 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_34 = 0;
                        _fx_N14Lexer__token_t v_177 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_178 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_35 = 0;
                        if (c1_0 == (char_)61) {
                           *pos_0 = *pos_0 + 1;
                           _fx_M5LexerFM9AUG_BINOPN14Lexer__token_t1N13Ast__binary_t(_fx_g12Lexer__OpMul, &v_174);
                           _fx_make_T2N14Lexer__token_tTa2i(&v_174, &loc_0, &v_175);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_175, 0, true, &result_33), _fx_catch_38);
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                           FX_COPY_PTR(result_33, &result_0);
                           FX_BREAK(_fx_catch_38);
                        }
                        else {
                           bool t_19;
                           if (c1_0 == (char_)42) {
                              t_19 = !prev_ne_0;
                           }
                           else {
                              t_19 = false;
                           }
                           if (t_19) {
                              *pos_0 = *pos_0 + 1;
                              _fx_make_T2N14Lexer__token_tTa2i(&_fx_g12Lexer__POWER, &loc_0, &v_176);
                              FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_176, 0, true, &result_34), _fx_catch_38);
                              _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                              FX_COPY_PTR(result_34, &result_0);
                              FX_BREAK(_fx_catch_38);
                           }
                           else {
                              _fx_M5LexerFM4STARN14Lexer__token_t1B(prev_ne_0, &v_177);
                              _fx_make_T2N14Lexer__token_tTa2i(&v_177, &loc_0, &v_178);
                              FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_178, 0, true, &result_35), _fx_catch_38);
                              _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                              FX_COPY_PTR(result_35, &result_0);
                              FX_BREAK(_fx_catch_38);
                           }
                        }

                     _fx_catch_38: ;
                        if (result_35) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_35);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_178);
                        _fx_free_N14Lexer__token_t(&v_177);
                        if (result_34) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_34);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_176);
                        if (result_33) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_33);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_175);
                        _fx_free_N14Lexer__token_t(&v_174);
                     }
                     else if (c_2 == (char_)47) {
                        _fx_N14Lexer__token_t v_179 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_180 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_36 = 0;
                        _fx_T2N14Lexer__token_tTa2i v_181 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_37 = 0;
                        if (c1_0 == (char_)61) {
                           *pos_0 = *pos_0 + 1;
                           _fx_M5LexerFM9AUG_BINOPN14Lexer__token_t1N13Ast__binary_t(_fx_g12Lexer__OpDiv, &v_179);
                           _fx_make_T2N14Lexer__token_tTa2i(&v_179, &loc_0, &v_180);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_180, 0, true, &result_36), _fx_catch_39);
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                           FX_COPY_PTR(result_36, &result_0);
                           FX_BREAK(_fx_catch_39);
                        }
                        else {
                           _fx_make_T2N14Lexer__token_tTa2i(&_fx_g12Lexer__SLASH, &loc_0, &v_181);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_181, 0, true, &result_37), _fx_catch_39);
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                           FX_COPY_PTR(result_37, &result_0);
                           FX_BREAK(_fx_catch_39);
                        }

                     _fx_catch_39: ;
                        if (result_37) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_37);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_181);
                        if (result_36) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_36);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_180);
                        _fx_free_N14Lexer__token_t(&v_179);
                     }
                     else if (c_2 == (char_)37) {
                        _fx_N14Lexer__token_t v_182 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_183 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_38 = 0;
                        _fx_T2N14Lexer__token_tTa2i v_184 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_39 = 0;
                        if (c1_0 == (char_)61) {
                           *pos_0 = *pos_0 + 1;
                           _fx_M5LexerFM9AUG_BINOPN14Lexer__token_t1N13Ast__binary_t(_fx_g12Lexer__OpMod, &v_182);
                           _fx_make_T2N14Lexer__token_tTa2i(&v_182, &loc_0, &v_183);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_183, 0, true, &result_38), _fx_catch_40);
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                           FX_COPY_PTR(result_38, &result_0);
                           FX_BREAK(_fx_catch_40);
                        }
                        else {
                           _fx_make_T2N14Lexer__token_tTa2i(&_fx_g14Lexer__PERCENT, &loc_0, &v_184);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_184, 0, true, &result_39), _fx_catch_40);
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                           FX_COPY_PTR(result_39, &result_0);
                           FX_BREAK(_fx_catch_40);
                        }

                     _fx_catch_40: ;
                        if (result_39) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_39);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_184);
                        if (result_38) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_38);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_183);
                        _fx_free_N14Lexer__token_t(&v_182);
                     }
                     else if (c_2 == (char_)61) {
                        _fx_T2N14Lexer__token_tTa2i v_185 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_40 = 0;
                        _fx_N14Lexer__token_t v_186 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_187 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_41 = 0;
                        _fx_T2N14Lexer__token_tTa2i v_188 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_42 = 0;
                        _fx_T2N14Lexer__token_tTa2i v_189 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_43 = 0;
                        if (c1_0 == (char_)61) {
                           *pos_0 = *pos_0 + 1;
                           if (c2_0 == (char_)61) {
                              *pos_0 = *pos_0 + 1;
                              _fx_make_T2N14Lexer__token_tTa2i(&_fx_g11Lexer__SAME, &loc_0, &v_185);
                              FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_185, 0, true, &result_40), _fx_catch_41);
                              _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                              FX_COPY_PTR(result_40, &result_0);
                              FX_BREAK(_fx_catch_41);
                           }
                           else {
                              _fx_M5LexerFM3CMPN14Lexer__token_t1N12Ast__cmpop_t(&_fx_g12Lexer__CmpEQ, &v_186);
                              _fx_make_T2N14Lexer__token_tTa2i(&v_186, &loc_0, &v_187);
                              FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_187, 0, true, &result_41), _fx_catch_41);
                              _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                              FX_COPY_PTR(result_41, &result_0);
                              FX_BREAK(_fx_catch_41);
                           }
                        }
                        else if (c1_0 == (char_)62) {
                           *pos_0 = *pos_0 + 1;
                           _fx_make_T2N14Lexer__token_tTa2i(&_fx_g19Lexer__DOUBLE_ARROW, &loc_0, &v_188);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_188, 0, true, &result_42), _fx_catch_41);
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                           FX_COPY_PTR(result_42, &result_0);
                           FX_BREAK(_fx_catch_41);
                        }
                        else {
                           _fx_make_T2N14Lexer__token_tTa2i(&_fx_g12Lexer__EQUAL, &loc_0, &v_189);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_189, 0, true, &result_43), _fx_catch_41);
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                           FX_COPY_PTR(result_43, &result_0);
                           FX_BREAK(_fx_catch_41);
                        }

                     _fx_catch_41: ;
                        if (result_43) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_43);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_189);
                        if (result_42) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_42);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_188);
                        if (result_41) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_41);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_187);
                        _fx_free_N14Lexer__token_t(&v_186);
                        if (result_40) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_40);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_185);
                     }
                     else if (c_2 == (char_)94) {
                        _fx_N14Lexer__token_t v_190 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_191 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_44 = 0;
                        _fx_T2N14Lexer__token_tTa2i v_192 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_45 = 0;
                        if (c1_0 == (char_)61) {
                           *pos_0 = *pos_0 + 1;
                           _fx_M5LexerFM9AUG_BINOPN14Lexer__token_t1N13Ast__binary_t(_fx_g19Lexer__OpBitwiseXor, &v_190);
                           _fx_make_T2N14Lexer__token_tTa2i(&v_190, &loc_0, &v_191);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_191, 0, true, &result_44), _fx_catch_42);
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                           FX_COPY_PTR(result_44, &result_0);
                           FX_BREAK(_fx_catch_42);
                        }
                        else {
                           _fx_make_T2N14Lexer__token_tTa2i(&_fx_g18Lexer__BITWISE_XOR, &loc_0, &v_192);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_192, 0, true, &result_45), _fx_catch_42);
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                           FX_COPY_PTR(result_45, &result_0);
                           FX_BREAK(_fx_catch_42);
                        }

                     _fx_catch_42: ;
                        if (result_45) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_45);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_192);
                        if (result_44) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_44);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_191);
                        _fx_free_N14Lexer__token_t(&v_190);
                     }
                     else if (c_2 == (char_)38) {
                        _fx_N14Lexer__token_t v_193 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_194 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_46 = 0;
                        _fx_T2N14Lexer__token_tTa2i v_195 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_47 = 0;
                        _fx_T2N14Lexer__token_tTa2i v_196 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_48 = 0;
                        if (c1_0 == (char_)61) {
                           *pos_0 = *pos_0 + 1;
                           _fx_M5LexerFM9AUG_BINOPN14Lexer__token_t1N13Ast__binary_t(_fx_g19Lexer__OpBitwiseAnd, &v_193);
                           _fx_make_T2N14Lexer__token_tTa2i(&v_193, &loc_0, &v_194);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_194, 0, true, &result_46), _fx_catch_43);
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                           FX_COPY_PTR(result_46, &result_0);
                           FX_BREAK(_fx_catch_43);
                        }
                        else if (c1_0 == (char_)38) {
                           *pos_0 = *pos_0 + 1;
                           _fx_make_T2N14Lexer__token_tTa2i(&_fx_g18Lexer__LOGICAL_AND, &loc_0, &v_195);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_195, 0, true, &result_47), _fx_catch_43);
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                           FX_COPY_PTR(result_47, &result_0);
                           FX_BREAK(_fx_catch_43);
                        }
                        else {
                           _fx_make_T2N14Lexer__token_tTa2i(&_fx_g18Lexer__BITWISE_AND, &loc_0, &v_196);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_196, 0, true, &result_48), _fx_catch_43);
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                           FX_COPY_PTR(result_48, &result_0);
                           FX_BREAK(_fx_catch_43);
                        }

                     _fx_catch_43: ;
                        if (result_48) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_48);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_196);
                        if (result_47) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_47);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_195);
                        if (result_46) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_46);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_194);
                        _fx_free_N14Lexer__token_t(&v_193);
                     }
                     else if (c_2 == (char_)126) {
                        _fx_T2N14Lexer__token_tTa2i v_197 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_49 = 0;
                        _fx_Ta2i v_198;
                        FX_CALL(_fx_M5LexerFM6getlocTa2i2iN20LexerUtils__stream_t(*pos_0 - 1, strm_0, &v_198, 0), _fx_catch_44);
                        fx_str_t slit_12 = FX_MAKE_STR("~");
                        FX_CALL(_fx_M5LexerFM8check_nev3BTa2iS(prev_ne_0, &v_198, &slit_12, 0), _fx_catch_44);
                        _fx_make_T2N14Lexer__token_tTa2i(&_fx_g12Lexer__TILDE, &loc_0, &v_197);
                        FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_197, 0, true, &result_49), _fx_catch_44);
                        _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                        FX_COPY_PTR(result_49, &result_0);
                        FX_BREAK(_fx_catch_44);

                     _fx_catch_44: ;
                        if (result_49) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_49);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_197);
                     }
                     else if (c_2 == (char_)64) {
                        _fx_T2N14Lexer__token_tTa2i v_199 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_50 = 0;
                        _fx_make_T2N14Lexer__token_tTa2i(&_fx_g9Lexer__AT, &loc_0, &v_199);
                        FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_199, 0, true, &result_50), _fx_catch_45);
                        _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                        FX_COPY_PTR(result_50, &result_0);
                        FX_BREAK(_fx_catch_45);

                     _fx_catch_45: ;
                        if (result_50) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_50);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_199);
                     }
                     else if (c_2 == (char_)92) {
                        _fx_N14Lexer__token_t v_200 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_201 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_51 = 0;
                        _fx_M5LexerFM9BACKSLASHN14Lexer__token_t1B(prev_ne_0, &v_200);
                        _fx_make_T2N14Lexer__token_tTa2i(&v_200, &loc_0, &v_201);
                        FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_201, 0, true, &result_51), _fx_catch_46);
                        _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                        FX_COPY_PTR(result_51, &result_0);
                        FX_BREAK(_fx_catch_46);

                     _fx_catch_46: ;
                        if (result_51) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_51);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_201);
                        _fx_free_N14Lexer__token_t(&v_200);
                     }
                     else if (c_2 == (char_)46) {
                        _fx_N14Lexer__token_t v_202 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_203 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_52 = 0;
                        _fx_T2N14Lexer__token_tTa2i v_204 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_53 = 0;
                        _fx_N14Lexer__token_t v_205 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_206 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_54 = 0;
                        _fx_T2N14Lexer__token_tTa2i v_207 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_55 = 0;
                        _fx_N14Lexer__token_t v_208 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_209 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_56 = 0;
                        _fx_N14Lexer__token_t v_210 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_211 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_57 = 0;
                        _fx_N14Lexer__token_t v_212 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_213 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_58 = 0;
                        _fx_N14Lexer__token_t v_214 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_215 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_59 = 0;
                        _fx_N14Lexer__token_t v_216 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_217 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_60 = 0;
                        _fx_N14Lexer__token_t v_218 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_219 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_61 = 0;
                        _fx_T2N14Lexer__token_tTa2i v_220 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_62 = 0;
                        _fx_N14Lexer__token_t v_221 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_222 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_63 = 0;
                        _fx_T2N14Lexer__token_tTa2i v_223 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_64 = 0;
                        _fx_N14Lexer__token_t v_224 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_225 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_65 = 0;
                        _fx_T2N14Lexer__token_tTa2i v_226 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_66 = 0;
                        _fx_N14Lexer__token_t v_227 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_228 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_67 = 0;
                        _fx_T2N14Lexer__token_tTa2i v_229 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_68 = 0;
                        _fx_T2N14Lexer__token_tTa2i v_230 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_69 = 0;
                        _fx_T2N14Lexer__token_tTa2i v_231 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_70 = 0;
                        if (c1_0 == (char_)61) {
                           if (c2_0 == (char_)61) {
                              *pos_0 = *pos_0 + 2;
                              _fx_M5LexerFM7DOT_CMPN14Lexer__token_t1N12Ast__cmpop_t(&_fx_g12Lexer__CmpEQ, &v_202);
                              _fx_make_T2N14Lexer__token_tTa2i(&v_202, &loc_0, &v_203);
                              FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_203, 0, true, &result_52), _fx_catch_47);
                              _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                              FX_COPY_PTR(result_52, &result_0);
                              FX_BREAK(_fx_catch_47);
                           }
                           else {
                              *pos_0 = *pos_0 + 1;
                              _fx_make_T2N14Lexer__token_tTa2i(&_fx_g16Lexer__DOT_EQUAL, &loc_0, &v_204);
                              FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_204, 0, true, &result_53), _fx_catch_47);
                              _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                              FX_COPY_PTR(result_53, &result_0);
                              FX_BREAK(_fx_catch_47);
                           }
                        }
                        else {
                           bool t_20;
                           if (c1_0 == (char_)33) {
                              t_20 = c2_0 == (char_)61;
                           }
                           else {
                              t_20 = false;
                           }
                           if (t_20) {
                              *pos_0 = *pos_0 + 2;
                              _fx_M5LexerFM7DOT_CMPN14Lexer__token_t1N12Ast__cmpop_t(&_fx_g12Lexer__CmpNE, &v_205);
                              _fx_make_T2N14Lexer__token_tTa2i(&v_205, &loc_0, &v_206);
                              FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_206, 0, true, &result_54), _fx_catch_47);
                              _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                              FX_COPY_PTR(result_54, &result_0);
                              FX_BREAK(_fx_catch_47);
                           }
                           else if (c1_0 == (char_)60) {
                              bool t_21;
                              if (c2_0 == (char_)61) {
                                 t_21 = c3_0 == (char_)62;
                              }
                              else {
                                 t_21 = false;
                              }
                              if (t_21) {
                                 *pos_0 = *pos_0 + 3;
                                 _fx_make_T2N14Lexer__token_tTa2i(&_fx_g20Lexer__DOT_SPACESHIP, &loc_0, &v_207);
                                 FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_207, 0, true, &result_55), _fx_catch_47);
                                 _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                                 FX_COPY_PTR(result_55, &result_0);
                                 FX_BREAK(_fx_catch_47);
                              }
                              else if (c2_0 == (char_)61) {
                                 *pos_0 = *pos_0 + 2;
                                 _fx_M5LexerFM7DOT_CMPN14Lexer__token_t1N12Ast__cmpop_t(&_fx_g12Lexer__CmpLE, &v_208);
                                 _fx_make_T2N14Lexer__token_tTa2i(&v_208, &loc_0, &v_209);
                                 FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_209, 0, true, &result_56), _fx_catch_47);
                                 _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                                 FX_COPY_PTR(result_56, &result_0);
                                 FX_BREAK(_fx_catch_47);
                              }
                              else {
                                 *pos_0 = *pos_0 + 1;
                                 _fx_M5LexerFM7DOT_CMPN14Lexer__token_t1N12Ast__cmpop_t(&_fx_g12Lexer__CmpLT, &v_210);
                                 _fx_make_T2N14Lexer__token_tTa2i(&v_210, &loc_0, &v_211);
                                 FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_211, 0, true, &result_57), _fx_catch_47);
                                 _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                                 FX_COPY_PTR(result_57, &result_0);
                                 FX_BREAK(_fx_catch_47);
                              }
                           }
                           else if (c1_0 == (char_)62) {
                              if (c2_0 == (char_)61) {
                                 *pos_0 = *pos_0 + 2;
                                 _fx_M5LexerFM7DOT_CMPN14Lexer__token_t1N12Ast__cmpop_t(&_fx_g12Lexer__CmpGE, &v_212);
                                 _fx_make_T2N14Lexer__token_tTa2i(&v_212, &loc_0, &v_213);
                                 FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_213, 0, true, &result_58), _fx_catch_47);
                                 _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                                 FX_COPY_PTR(result_58, &result_0);
                                 FX_BREAK(_fx_catch_47);
                              }
                              else {
                                 *pos_0 = *pos_0 + 1;
                                 _fx_M5LexerFM7DOT_CMPN14Lexer__token_t1N12Ast__cmpop_t(&_fx_g12Lexer__CmpGT, &v_214);
                                 _fx_make_T2N14Lexer__token_tTa2i(&v_214, &loc_0, &v_215);
                                 FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_215, 0, true, &result_59), _fx_catch_47);
                                 _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                                 FX_COPY_PTR(result_59, &result_0);
                                 FX_BREAK(_fx_catch_47);
                              }
                           }
                           else if (c1_0 == (char_)43) {
                              *pos_0 = *pos_0 + 1;
                              _fx_M5LexerFM8DOT_PLUSN14Lexer__token_t1B(prev_ne_0, &v_216);
                              _fx_make_T2N14Lexer__token_tTa2i(&v_216, &loc_0, &v_217);
                              FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_217, 0, true, &result_60), _fx_catch_47);
                              _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                              FX_COPY_PTR(result_60, &result_0);
                              FX_BREAK(_fx_catch_47);
                           }
                           else if (c1_0 == (char_)45) {
                              *pos_0 = *pos_0 + 1;
                              _fx_M5LexerFM9DOT_MINUSN14Lexer__token_t1B(prev_ne_0, &v_218);
                              _fx_make_T2N14Lexer__token_tTa2i(&v_218, &loc_0, &v_219);
                              FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_219, 0, true, &result_61), _fx_catch_47);
                              _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                              FX_COPY_PTR(result_61, &result_0);
                              FX_BREAK(_fx_catch_47);
                           }
                           else if (c1_0 == (char_)42) {
                              if (c2_0 == (char_)42) {
                                 *pos_0 = *pos_0 + 2;
                                 _fx_make_T2N14Lexer__token_tTa2i(&_fx_g16Lexer__DOT_POWER, &loc_0, &v_220);
                                 FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_220, 0, true, &result_62), _fx_catch_47);
                                 _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                                 FX_COPY_PTR(result_62, &result_0);
                                 FX_BREAK(_fx_catch_47);
                              }
                              else if (c2_0 == (char_)61) {
                                 *pos_0 = *pos_0 + 2;
                                 _fx_M5LexerFM9AUG_BINOPN14Lexer__token_t1N13Ast__binary_t(_fx_g15Lexer__OpDotMul, &v_221);
                                 _fx_make_T2N14Lexer__token_tTa2i(&v_221, &loc_0, &v_222);
                                 FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_222, 0, true, &result_63), _fx_catch_47);
                                 _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                                 FX_COPY_PTR(result_63, &result_0);
                                 FX_BREAK(_fx_catch_47);
                              }
                              else {
                                 *pos_0 = *pos_0 + 1;
                                 _fx_make_T2N14Lexer__token_tTa2i(&_fx_g15Lexer__DOT_STAR, &loc_0, &v_223);
                                 FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_223, 0, true, &result_64), _fx_catch_47);
                                 _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                                 FX_COPY_PTR(result_64, &result_0);
                                 FX_BREAK(_fx_catch_47);
                              }
                           }
                           else if (c1_0 == (char_)47) {
                              if (c2_0 == (char_)61) {
                                 *pos_0 = *pos_0 + 2;
                                 _fx_M5LexerFM9AUG_BINOPN14Lexer__token_t1N13Ast__binary_t(_fx_g15Lexer__OpDotDiv, &v_224);
                                 _fx_make_T2N14Lexer__token_tTa2i(&v_224, &loc_0, &v_225);
                                 FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_225, 0, true, &result_65), _fx_catch_47);
                                 _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                                 FX_COPY_PTR(result_65, &result_0);
                                 FX_BREAK(_fx_catch_47);
                              }
                              else {
                                 *pos_0 = *pos_0 + 1;
                                 _fx_make_T2N14Lexer__token_tTa2i(&_fx_g16Lexer__DOT_SLASH, &loc_0, &v_226);
                                 FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_226, 0, true, &result_66), _fx_catch_47);
                                 _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                                 FX_COPY_PTR(result_66, &result_0);
                                 FX_BREAK(_fx_catch_47);
                              }
                           }
                           else if (c1_0 == (char_)37) {
                              if (c2_0 == (char_)61) {
                                 *pos_0 = *pos_0 + 2;
                                 _fx_M5LexerFM9AUG_BINOPN14Lexer__token_t1N13Ast__binary_t(_fx_g15Lexer__OpDotMod, &v_227);
                                 _fx_make_T2N14Lexer__token_tTa2i(&v_227, &loc_0, &v_228);
                                 FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_228, 0, true, &result_67), _fx_catch_47);
                                 _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                                 FX_COPY_PTR(result_67, &result_0);
                                 FX_BREAK(_fx_catch_47);
                              }
                              else {
                                 *pos_0 = *pos_0 + 1;
                                 _fx_make_T2N14Lexer__token_tTa2i(&_fx_g18Lexer__DOT_PERCENT, &loc_0, &v_229);
                                 FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_229, 0, true, &result_68), _fx_catch_47);
                                 _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                                 FX_COPY_PTR(result_68, &result_0);
                                 FX_BREAK(_fx_catch_47);
                              }
                           }
                           else {
                              bool t_22;
                              if (c1_0 == (char_)46) {
                                 t_22 = c2_0 == (char_)46;
                              }
                              else {
                                 t_22 = false;
                              }
                              if (t_22) {
                                 *pos_0 = *pos_0 + 2;
                                 _fx_make_T2N14Lexer__token_tTa2i(&_fx_g15Lexer__ELLIPSIS, &loc_0, &v_230);
                                 FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_230, 0, true, &result_69), _fx_catch_47);
                                 _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                                 FX_COPY_PTR(result_69, &result_0);
                                 FX_BREAK(_fx_catch_47);
                              }
                              else {
                                 *prev_dot_0 = true;
                                 _fx_make_T2N14Lexer__token_tTa2i(&_fx_g10Lexer__DOT, &loc_0, &v_231);
                                 FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_231, 0, true, &result_70), _fx_catch_47);
                                 _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                                 FX_COPY_PTR(result_70, &result_0);
                                 FX_BREAK(_fx_catch_47);
                              }
                           }
                        }

                     _fx_catch_47: ;
                        if (result_70) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_70);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_231);
                        if (result_69) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_69);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_230);
                        if (result_68) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_68);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_229);
                        if (result_67) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_67);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_228);
                        _fx_free_N14Lexer__token_t(&v_227);
                        if (result_66) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_66);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_226);
                        if (result_65) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_65);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_225);
                        _fx_free_N14Lexer__token_t(&v_224);
                        if (result_64) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_64);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_223);
                        if (result_63) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_63);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_222);
                        _fx_free_N14Lexer__token_t(&v_221);
                        if (result_62) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_62);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_220);
                        if (result_61) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_61);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_219);
                        _fx_free_N14Lexer__token_t(&v_218);
                        if (result_60) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_60);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_217);
                        _fx_free_N14Lexer__token_t(&v_216);
                        if (result_59) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_59);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_215);
                        _fx_free_N14Lexer__token_t(&v_214);
                        if (result_58) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_58);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_213);
                        _fx_free_N14Lexer__token_t(&v_212);
                        if (result_57) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_57);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_211);
                        _fx_free_N14Lexer__token_t(&v_210);
                        if (result_56) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_56);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_209);
                        _fx_free_N14Lexer__token_t(&v_208);
                        if (result_55) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_55);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_207);
                        if (result_54) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_54);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_206);
                        _fx_free_N14Lexer__token_t(&v_205);
                        if (result_53) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_53);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_204);
                        if (result_52) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_52);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_203);
                        _fx_free_N14Lexer__token_t(&v_202);
                     }
                     else if (c_2 == (char_)44) {
                        _fx_T2N14Lexer__token_tTa2i v_232 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_71 = 0;
                        _fx_make_T2N14Lexer__token_tTa2i(&_fx_g12Lexer__COMMA, &loc_0, &v_232);
                        FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_232, 0, true, &result_71), _fx_catch_48);
                        _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                        FX_COPY_PTR(result_71, &result_0);
                        FX_BREAK(_fx_catch_48);

                     _fx_catch_48: ;
                        if (result_71) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_71);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_232);
                     }
                     else if (c_2 == (char_)59) {
                        _fx_T2N14Lexer__token_tTa2i v_233 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_72 = 0;
                        _fx_make_T2N14Lexer__token_tTa2i(&_fx_g16Lexer__SEMICOLON, &loc_0, &v_233);
                        FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_233, 0, true, &result_72), _fx_catch_49);
                        _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                        FX_COPY_PTR(result_72, &result_0);
                        FX_BREAK(_fx_catch_49);

                     _fx_catch_49: ;
                        if (result_72) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_72);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_233);
                     }
                     else if (c_2 == (char_)58) {
                        _fx_LT2N14Lexer__token_tTa2i paren_stack_8 = 0;
                        FX_COPY_PTR(*paren_stack_0, &paren_stack_8);
                        if (paren_stack_8 != 0) {
                           if (paren_stack_8->hd.t0.tag == 45) {
                              fx_exn_t curr_exn_0 = {0};
                              fx_exn_t v_234 = {0};
                              fx_exn_t v_235 = {0};
                              _fx_T2R8format_ti v_236;
                              FX_CALL(_fx_F12parse_formatT2R8format_ti2Si(&buf_0, *pos_0, &v_236, 0), _fx_catch_50);

                           _fx_catch_50: ;
                              if (fx_status < 0) {
                                 fx_exn_get_and_reset(fx_status, &curr_exn_0);
                                 fx_status = 0;
                                 _fx_Ta2i v_237;
                                 FX_CALL(_fx_M5LexerFM6getlocTa2i2iN20LexerUtils__stream_t(*pos_0, strm_0, &v_237, 0),
                                    _fx_catch_51);
                                 fx_str_t slit_13 = FX_MAKE_STR("invalid format specification");
                                 FX_CALL(_fx_M10LexerUtilsFM15make_LexerErrorE2Ta2iS(&v_237, &slit_13, &v_234), _fx_catch_51);
                                 FX_THROW(&v_234, true, _fx_catch_51);
                              }
                              _fx_R8format_t fmt__0 = v_236.t0;
                              int_ end_0 = v_236.t1;
                              _fx_Nt6option1R8format_t v_238;
                              _fx_M5LexerFM4SomeNt6option1R8format_t1R8format_t(&fmt__0, &v_238);
                              *fmt_0 = v_238;
                              *pos_0 = end_0;
                              if (FX_STR_ELEM_ZERO(buf_0, *pos_0) != (char_)125) {
                                 _fx_Ta2i v_239;
                                 FX_CALL(_fx_M5LexerFM6getlocTa2i2iN20LexerUtils__stream_t(*pos_0, strm_0, &v_239, 0),
                                    _fx_catch_51);
                                 fx_str_t slit_14 =
                                    FX_MAKE_STR("\'}\' is expected after \':...\' inside interpolated expression");
                                 FX_CALL(_fx_M10LexerUtilsFM15make_LexerErrorE2Ta2iS(&v_239, &slit_14, &v_235), _fx_catch_51);
                                 FX_THROW(&v_235, true, _fx_catch_51);
                              }

                           _fx_catch_51: ;
                              fx_free_exn(&v_235);
                              fx_free_exn(&v_234);
                              fx_free_exn(&curr_exn_0);
                              goto _fx_endmatch_11;
                           }
                        }
                        _fx_T2N14Lexer__token_tTa2i v_240 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_73 = 0;
                        _fx_T2N14Lexer__token_tTa2i v_241 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_74 = 0;
                        _fx_T2N14Lexer__token_tTa2i v_242 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_75 = 0;
                        if (c1_0 == (char_)58) {
                           *pos_0 = *pos_0 + 1;
                           _fx_make_T2N14Lexer__token_tTa2i(&_fx_g11Lexer__CONS, &loc_0, &v_240);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_240, 0, true, &result_73), _fx_catch_52);
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                           FX_COPY_PTR(result_73, &result_0);
                           FX_BREAK(_fx_catch_52);
                        }
                        else if (c1_0 == (char_)62) {
                           *pos_0 = *pos_0 + 1;
                           _fx_make_T2N14Lexer__token_tTa2i(&_fx_g11Lexer__CAST, &loc_0, &v_241);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_241, 0, true, &result_74), _fx_catch_52);
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                           FX_COPY_PTR(result_74, &result_0);
                           FX_BREAK(_fx_catch_52);
                        }
                        else {
                           _fx_make_T2N14Lexer__token_tTa2i(&_fx_g12Lexer__COLON, &loc_0, &v_242);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_242, 0, true, &result_75), _fx_catch_52);
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                           FX_COPY_PTR(result_75, &result_0);
                           FX_BREAK(_fx_catch_52);
                        }

                     _fx_catch_52: ;
                        if (result_75) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_75);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_242);
                        if (result_74) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_74);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_241);
                        if (result_73) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_73);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_240);

                     _fx_endmatch_11: ;
                        FX_CHECK_EXN(_fx_catch_53);

                     _fx_catch_53: ;
                        if (paren_stack_8) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&paren_stack_8);
                        }
                     }
                     else if (c_2 == (char_)33) {
                        _fx_N14Lexer__token_t v_243 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_244 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_76 = 0;
                        _fx_T2N14Lexer__token_tTa2i v_245 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_77 = 0;
                        if (c1_0 == (char_)61) {
                           *pos_0 = *pos_0 + 1;
                           _fx_M5LexerFM3CMPN14Lexer__token_t1N12Ast__cmpop_t(&_fx_g12Lexer__CmpNE, &v_243);
                           _fx_make_T2N14Lexer__token_tTa2i(&v_243, &loc_0, &v_244);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_244, 0, true, &result_76), _fx_catch_54);
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                           FX_COPY_PTR(result_76, &result_0);
                           FX_BREAK(_fx_catch_54);
                        }
                        else {
                           _fx_Ta2i v_246;
                           FX_CALL(_fx_M5LexerFM6getlocTa2i2iN20LexerUtils__stream_t(*pos_0 - 1, strm_0, &v_246, 0),
                              _fx_catch_54);
                           fx_str_t slit_15 = FX_MAKE_STR("!");
                           FX_CALL(_fx_M5LexerFM8check_nev3BTa2iS(prev_ne_0, &v_246, &slit_15, 0), _fx_catch_54);
                           _fx_make_T2N14Lexer__token_tTa2i(&_fx_g18Lexer__LOGICAL_NOT, &loc_0, &v_245);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_245, 0, true, &result_77), _fx_catch_54);
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                           FX_COPY_PTR(result_77, &result_0);
                           FX_BREAK(_fx_catch_54);
                        }

                     _fx_catch_54: ;
                        if (result_77) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_77);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_245);
                        if (result_76) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_76);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_244);
                        _fx_free_N14Lexer__token_t(&v_243);
                     }
                     else if (c_2 == (char_)63) {
                        _fx_T2N14Lexer__token_tTa2i v_247 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_78 = 0;
                        *new_exp_0 = false;
                        _fx_make_T2N14Lexer__token_tTa2i(&_fx_g15Lexer__QUESTION, &loc_0, &v_247);
                        FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_247, 0, true, &result_78), _fx_catch_55);
                        _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                        FX_COPY_PTR(result_78, &result_0);
                        FX_BREAK(_fx_catch_55);

                     _fx_catch_55: ;
                        if (result_78) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_78);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_247);
                     }
                     else if (c_2 == (char_)60) {
                        _fx_T2N14Lexer__token_tTa2i v_248 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_79 = 0;
                        _fx_N14Lexer__token_t v_249 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_250 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_80 = 0;
                        _fx_N14Lexer__token_t v_251 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_252 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_81 = 0;
                        _fx_T2N14Lexer__token_tTa2i v_253 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_82 = 0;
                        _fx_T2N14Lexer__token_tTa2i v_254 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_83 = 0;
                        _fx_N14Lexer__token_t v_255 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_256 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_84 = 0;
                        if (c1_0 == (char_)61) {
                           if (c2_0 == (char_)62) {
                              *pos_0 = *pos_0 + 2;
                              _fx_make_T2N14Lexer__token_tTa2i(&_fx_g16Lexer__SPACESHIP, &loc_0, &v_248);
                              FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_248, 0, true, &result_79), _fx_catch_56);
                              _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                              FX_COPY_PTR(result_79, &result_0);
                              FX_BREAK(_fx_catch_56);
                           }
                           else {
                              *pos_0 = *pos_0 + 1;
                              _fx_M5LexerFM3CMPN14Lexer__token_t1N12Ast__cmpop_t(&_fx_g12Lexer__CmpLE, &v_249);
                              _fx_make_T2N14Lexer__token_tTa2i(&v_249, &loc_0, &v_250);
                              FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_250, 0, true, &result_80), _fx_catch_56);
                              _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                              FX_COPY_PTR(result_80, &result_0);
                              FX_BREAK(_fx_catch_56);
                           }
                        }
                        else if (c1_0 == (char_)60) {
                           if (c2_0 == (char_)61) {
                              *pos_0 = *pos_0 + 2;
                              _fx_M5LexerFM9AUG_BINOPN14Lexer__token_t1N13Ast__binary_t(_fx_g18Lexer__OpShiftLeft, &v_251);
                              _fx_make_T2N14Lexer__token_tTa2i(&v_251, &loc_0, &v_252);
                              FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_252, 0, true, &result_81), _fx_catch_56);
                              _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                              FX_COPY_PTR(result_81, &result_0);
                              FX_BREAK(_fx_catch_56);
                           }
                           else {
                              *pos_0 = *pos_0 + 1;
                              _fx_make_T2N14Lexer__token_tTa2i(&_fx_g17Lexer__SHIFT_LEFT, &loc_0, &v_253);
                              FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_253, 0, true, &result_82), _fx_catch_56);
                              _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                              FX_COPY_PTR(result_82, &result_0);
                              FX_BREAK(_fx_catch_56);
                           }
                        }
                        else if (c1_0 == (char_)45) {
                           *pos_0 = *pos_0 + 1;
                           _fx_make_T2N14Lexer__token_tTa2i(&_fx_g17Lexer__BACK_ARROW, &loc_0, &v_254);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_254, 0, true, &result_83), _fx_catch_56);
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                           FX_COPY_PTR(result_83, &result_0);
                           FX_BREAK(_fx_catch_56);
                        }
                        else {
                           _fx_M5LexerFM3CMPN14Lexer__token_t1N12Ast__cmpop_t(&_fx_g12Lexer__CmpLT, &v_255);
                           _fx_make_T2N14Lexer__token_tTa2i(&v_255, &loc_0, &v_256);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_256, 0, true, &result_84), _fx_catch_56);
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                           FX_COPY_PTR(result_84, &result_0);
                           FX_BREAK(_fx_catch_56);
                        }

                     _fx_catch_56: ;
                        if (result_84) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_84);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_256);
                        _fx_free_N14Lexer__token_t(&v_255);
                        if (result_83) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_83);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_254);
                        if (result_82) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_82);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_253);
                        if (result_81) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_81);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_252);
                        _fx_free_N14Lexer__token_t(&v_251);
                        if (result_80) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_80);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_250);
                        _fx_free_N14Lexer__token_t(&v_249);
                        if (result_79) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_79);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_248);
                     }
                     else if (c_2 == (char_)62) {
                        _fx_N14Lexer__token_t v_257 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_258 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_85 = 0;
                        _fx_N14Lexer__token_t v_259 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_260 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_86 = 0;
                        _fx_T2N14Lexer__token_tTa2i v_261 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_87 = 0;
                        _fx_N14Lexer__token_t v_262 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_263 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_88 = 0;
                        if (c1_0 == (char_)61) {
                           *pos_0 = *pos_0 + 1;
                           _fx_M5LexerFM3CMPN14Lexer__token_t1N12Ast__cmpop_t(&_fx_g12Lexer__CmpGE, &v_257);
                           _fx_make_T2N14Lexer__token_tTa2i(&v_257, &loc_0, &v_258);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_258, 0, true, &result_85), _fx_catch_57);
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                           FX_COPY_PTR(result_85, &result_0);
                           FX_BREAK(_fx_catch_57);
                        }
                        else if (c1_0 == (char_)62) {
                           if (c2_0 == (char_)61) {
                              *pos_0 = *pos_0 + 2;
                              _fx_M5LexerFM9AUG_BINOPN14Lexer__token_t1N13Ast__binary_t(_fx_g19Lexer__OpShiftRight, &v_259);
                              _fx_make_T2N14Lexer__token_tTa2i(&v_259, &loc_0, &v_260);
                              FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_260, 0, true, &result_86), _fx_catch_57);
                              _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                              FX_COPY_PTR(result_86, &result_0);
                              FX_BREAK(_fx_catch_57);
                           }
                           else {
                              *pos_0 = *pos_0 + 1;
                              _fx_make_T2N14Lexer__token_tTa2i(&_fx_g18Lexer__SHIFT_RIGHT, &loc_0, &v_261);
                              FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_261, 0, true, &result_87), _fx_catch_57);
                              _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                              FX_COPY_PTR(result_87, &result_0);
                              FX_BREAK(_fx_catch_57);
                           }
                        }
                        else {
                           _fx_M5LexerFM3CMPN14Lexer__token_t1N12Ast__cmpop_t(&_fx_g12Lexer__CmpGT, &v_262);
                           _fx_make_T2N14Lexer__token_tTa2i(&v_262, &loc_0, &v_263);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_263, 0, true, &result_88), _fx_catch_57);
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                           FX_COPY_PTR(result_88, &result_0);
                           FX_BREAK(_fx_catch_57);
                        }

                     _fx_catch_57: ;
                        if (result_88) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_88);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_263);
                        _fx_free_N14Lexer__token_t(&v_262);
                        if (result_87) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_87);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_261);
                        if (result_86) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_86);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_260);
                        _fx_free_N14Lexer__token_t(&v_259);
                        if (result_85) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_85);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_258);
                        _fx_free_N14Lexer__token_t(&v_257);
                     }
                     else if (c_2 == (char_)96) {
                        _fx_N14Lexer__token_t v_264 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_265 = {0};
                        _fx_LT2N14Lexer__token_tTa2i v_266 = 0;
                        _fx_N14Lexer__token_t v_267 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_268 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_89 = 0;
                        fx_str_t verb_0 = {0};
                        _fx_LT2N14Lexer__token_tTa2i paren_stack_9 = 0;
                        _fx_T2N14Lexer__token_tTa2i v_269 = {0};
                        _fx_N10Ast__lit_t v_270 = {0};
                        _fx_N14Lexer__token_t v_271 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_272 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_273 = {0};
                        fx_str_t v_274 = {0};
                        fx_str_t v_275 = {0};
                        _fx_N10Ast__lit_t v_276 = {0};
                        _fx_N14Lexer__token_t v_277 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_278 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_279 = {0};
                        _fx_N10Ast__lit_t v_280 = {0};
                        _fx_N14Lexer__token_t v_281 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_282 = {0};
                        _fx_T2N14Lexer__token_tTa2i v_283 = {0};
                        _fx_LT2N14Lexer__token_tTa2i v_284 = 0;
                        if (*backquote_pos_0 < 0) {
                           *backquote_pos_0 = *pos_0;
                           _fx_Ta2i v_285;
                           FX_CALL(_fx_M5LexerFM6getlocTa2i2iN20LexerUtils__stream_t(*pos_0 - 1, strm_0, &v_285, 0),
                              _fx_catch_59);
                           *backquote_loc_0 = v_285;
                           _fx_M5LexerFM6LPARENN14Lexer__token_t1B(true, &v_264);
                           _fx_make_T2N14Lexer__token_tTa2i(&v_264, backquote_loc_0, &v_265);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_265, *paren_stack_0, true, &v_266), _fx_catch_59);
                           _fx_free_LT2N14Lexer__token_tTa2i(paren_stack_0);
                           FX_COPY_PTR(v_266, paren_stack_0);
                           _fx_M5LexerFM6LPARENN14Lexer__token_t1B(true, &v_267);
                           _fx_make_T2N14Lexer__token_tTa2i(&v_267, &loc_0, &v_268);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_268, 0, true, &result_89), _fx_catch_59);
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                           FX_COPY_PTR(result_89, &result_0);
                           FX_BREAK(_fx_catch_59);
                        }
                        else {
                           FX_CALL(fx_substr(&buf_0, *backquote_pos_0, *pos_0 - 1, 1, 0, &verb_0), _fx_catch_59);
                           _fx_Ta2i endloc_0;
                           FX_CALL(_fx_M5LexerFM6getlocTa2i2iN20LexerUtils__stream_t(*pos_0, strm_0, &endloc_0, 0),
                              _fx_catch_59);
                           *backquote_pos_0 = -1;
                           *new_exp_0 = false;
                           FX_COPY_PTR(*paren_stack_0, &paren_stack_9);
                           if (paren_stack_9 != 0) {
                              if (paren_stack_9->hd.t0.tag == 44) {
                                 _fx_LT2N14Lexer__token_tTa2i* rest_6 = &paren_stack_9->tl;
                                 _fx_free_LT2N14Lexer__token_tTa2i(paren_stack_0);
                                 FX_COPY_PTR(*rest_6, paren_stack_0);
                                 goto _fx_endmatch_12;
                              }
                           }
                           fx_exn_t v_286 = {0};
                           fx_str_t slit_16 = FX_MAKE_STR("Unexpected \'`\', check parens");
                           FX_CALL(_fx_M10LexerUtilsFM15make_LexerErrorE2Ta2iS(&loc_0, &slit_16, &v_286), _fx_catch_58);
                           FX_THROW(&v_286, true, _fx_catch_58);

                        _fx_catch_58: ;
                           fx_free_exn(&v_286);

                        _fx_endmatch_12: ;
                           FX_CHECK_EXN(_fx_catch_59);
                           _fx_make_T2N14Lexer__token_tTa2i(&_fx_g12Lexer__COMMA, &endloc_0, &v_269);
                           _fx_M3AstFM9LitStringN10Ast__lit_t1S(&verb_0, &v_270);
                           _fx_M5LexerFM7LITERALN14Lexer__token_t1N10Ast__lit_t(&v_270, &v_271);
                           _fx_make_T2N14Lexer__token_tTa2i(&v_271, backquote_loc_0, &v_272);
                           _fx_make_T2N14Lexer__token_tTa2i(&_fx_g12Lexer__COMMA, &endloc_0, &v_273);
                           fx_copy_str(&strm_0->u.stream_t.t0, &v_274);
                           FX_CALL(_fx_M8FilenameFM8basenameS1S(&v_274, &v_275, 0), _fx_catch_59);
                           _fx_M3AstFM9LitStringN10Ast__lit_t1S(&v_275, &v_276);
                           _fx_M5LexerFM7LITERALN14Lexer__token_t1N10Ast__lit_t(&v_276, &v_277);
                           _fx_make_T2N14Lexer__token_tTa2i(&v_277, backquote_loc_0, &v_278);
                           _fx_make_T2N14Lexer__token_tTa2i(&_fx_g12Lexer__COMMA, &endloc_0, &v_279);
                           _fx_M3AstFM6LitIntN10Ast__lit_t1l((int64_t)backquote_loc_0->t0, &v_280);
                           _fx_M5LexerFM7LITERALN14Lexer__token_t1N10Ast__lit_t(&v_280, &v_281);
                           _fx_make_T2N14Lexer__token_tTa2i(&v_281, backquote_loc_0, &v_282);
                           _fx_make_T2N14Lexer__token_tTa2i(&_fx_g13Lexer__RPAREN, &endloc_0, &v_283);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_283, 0, true, &v_284), _fx_catch_59);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_282, v_284, false, &v_284), _fx_catch_59);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_279, v_284, false, &v_284), _fx_catch_59);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_278, v_284, false, &v_284), _fx_catch_59);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_273, v_284, false, &v_284), _fx_catch_59);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_272, v_284, false, &v_284), _fx_catch_59);
                           FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_269, v_284, false, &v_284), _fx_catch_59);
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                           FX_COPY_PTR(v_284, &result_0);
                           FX_BREAK(_fx_catch_59);
                        }

                     _fx_catch_59: ;
                        if (v_284) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&v_284);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_283);
                        _fx_free_T2N14Lexer__token_tTa2i(&v_282);
                        _fx_free_N14Lexer__token_t(&v_281);
                        _fx_free_N10Ast__lit_t(&v_280);
                        _fx_free_T2N14Lexer__token_tTa2i(&v_279);
                        _fx_free_T2N14Lexer__token_tTa2i(&v_278);
                        _fx_free_N14Lexer__token_t(&v_277);
                        _fx_free_N10Ast__lit_t(&v_276);
                        FX_FREE_STR(&v_275);
                        FX_FREE_STR(&v_274);
                        _fx_free_T2N14Lexer__token_tTa2i(&v_273);
                        _fx_free_T2N14Lexer__token_tTa2i(&v_272);
                        _fx_free_N14Lexer__token_t(&v_271);
                        _fx_free_N10Ast__lit_t(&v_270);
                        _fx_free_T2N14Lexer__token_tTa2i(&v_269);
                        if (paren_stack_9) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&paren_stack_9);
                        }
                        FX_FREE_STR(&verb_0);
                        if (result_89) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_89);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_268);
                        _fx_free_N14Lexer__token_t(&v_267);
                        if (v_266) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&v_266);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_265);
                        _fx_free_N14Lexer__token_t(&v_264);
                     }
                     else if (c_2 == (char_)0) {
                        _fx_LT2N14Lexer__token_tTa2i paren_stack_10 = 0;
                        _fx_T2N14Lexer__token_tTa2i v_287 = {0};
                        _fx_LT2N14Lexer__token_tTa2i result_90 = 0;
                        FX_COPY_PTR(*paren_stack_0, &paren_stack_10);
                        if (paren_stack_10 != 0) {
                           fx_str_t v_288 = {0};
                           fx_str_t v_289 = {0};
                           fx_str_t v_290 = {0};
                           fx_exn_t v_291 = {0};
                           FX_CALL(
                              _fx_M5LexerFM8lloc2strS2Ta2iN20LexerUtils__stream_t(&paren_stack_10->hd.t1, strm_0, &v_288, 0),
                              _fx_catch_60);
                           FX_CALL(_fx_M5LexerFM6stringS1S(&v_288, &v_289, 0), _fx_catch_60);
                           fx_str_t slit_17 = FX_MAKE_STR("some braces (around ");
                           fx_str_t slit_18 = FX_MAKE_STR(") are not closed");
                           {
                              const fx_str_t strs_2[] = { slit_17, v_289, slit_18 };
                              FX_CALL(fx_strjoin(0, 0, 0, strs_2, 3, &v_290), _fx_catch_60);
                           }
                           FX_CALL(_fx_M10LexerUtilsFM15make_LexerErrorE2Ta2iS(&loc_0, &v_290, &v_291), _fx_catch_60);
                           FX_THROW(&v_291, true, _fx_catch_60);

                        _fx_catch_60: ;
                           fx_free_exn(&v_291);
                           FX_FREE_STR(&v_290);
                           FX_FREE_STR(&v_289);
                           FX_FREE_STR(&v_288);
                        }
                        FX_CHECK_EXN(_fx_catch_61);
                        _fx_make_T2N14Lexer__token_tTa2i(&_fx_g10Lexer__EOF, &loc_0, &v_287);
                        FX_CALL(_fx_cons_LT2N14Lexer__token_tTa2i(&v_287, 0, true, &result_90), _fx_catch_61);
                        _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
                        FX_COPY_PTR(result_90, &result_0);
                        FX_BREAK(_fx_catch_61);

                     _fx_catch_61: ;
                        if (result_90) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&result_90);
                        }
                        _fx_free_T2N14Lexer__token_tTa2i(&v_287);
                        if (paren_stack_10) {
                           _fx_free_LT2N14Lexer__token_tTa2i(&paren_stack_10);
                        }
                     }
                     else {
                        fx_str_t v_292 = {0};
                        fx_str_t v_293 = {0};
                        fx_exn_t v_294 = {0};
                        FX_CALL(_fx_F6stringS1C(c_0, &v_292, 0), _fx_catch_62);
                        fx_str_t slit_19 = FX_MAKE_STR("unrecognized character \'");
                        fx_str_t slit_20 = FX_MAKE_STR("\'");
                        {
                           const fx_str_t strs_3[] = { slit_19, v_292, slit_20 };
                           FX_CALL(fx_strjoin(0, 0, 0, strs_3, 3, &v_293), _fx_catch_62);
                        }
                        FX_CALL(_fx_M10LexerUtilsFM15make_LexerErrorE2Ta2iS(&loc_0, &v_293, &v_294), _fx_catch_62);
                        FX_THROW(&v_294, true, _fx_catch_62);

                     _fx_catch_62: ;
                        fx_free_exn(&v_294);
                        FX_FREE_STR(&v_293);
                        FX_FREE_STR(&v_292);
                     }
                     FX_CHECK_EXN(_fx_catch_63);
                  }
               }
            }
         }
      }

   _fx_catch_63: ;
      _fx_free_Nt6option1T2N14Lexer__token_ti(&v_35);
      FX_FREE_STR(&ident_0);
      FX_FREE_STR(&v_34);
      if (result_6) {
         _fx_free_LT2N14Lexer__token_tTa2i(&result_6);
      }
      _fx_free_T2N14Lexer__token_tTa2i(&v_33);
      _fx_free_N14Lexer__token_t(&v_32);
      _fx_free_N10Ast__lit_t(&v_31);
      if (result_5) {
         _fx_free_LT2N14Lexer__token_tTa2i(&result_5);
      }
      if (v_30) {
         _fx_free_LN14Lexer__token_t(&v_30);
      }
      if (v_29) {
         _fx_free_LN14Lexer__token_t(&v_29);
      }
      _fx_free_N14Lexer__token_t(&v_28);
      _fx_free_N14Lexer__token_t(&v_27);
      if (v_26) {
         _fx_free_LN14Lexer__token_t(&v_26);
      }
      _fx_free_N14Lexer__token_t(&v_25);
      _fx_free_N14Lexer__token_t(&v_24);
      _fx_free_N10Ast__lit_t(&v_23);
      _fx_free_N14Lexer__token_t(&v_22);
      _fx_free_N14Lexer__token_t(&v_21);
      if (v_20) {
         _fx_free_LN14Lexer__token_t(&v_20);
      }
      if (v_19) {
         _fx_free_LT2N14Lexer__token_tTa2i(&v_19);
      }
      _fx_free_T2N14Lexer__token_tTa2i(&v_18);
      if (result_4) {
         _fx_free_LT2N14Lexer__token_tTa2i(&result_4);
      }
      _fx_free_T2N14Lexer__token_tTa2i(&v_17);
      _fx_free_N14Lexer__token_t(&v_16);
      _fx_free_N10Ast__lit_t(&v_15);
      fx_free_exn(&v_14);
      FX_FREE_STR(&res_0);
      _fx_free_T4iSiB(&v_13);
      if (result_3) {
         _fx_free_LT2N14Lexer__token_tTa2i(&result_3);
      }
      _fx_free_T2N14Lexer__token_tTa2i(&v_12);
      _fx_free_N14Lexer__token_t(&v_11);
      FX_FREE_STR(&tyvar_0);
      FX_FREE_STR(&v_10);
      if (result_2) {
         _fx_free_LT2N14Lexer__token_tTa2i(&result_2);
      }
      _fx_free_T2N14Lexer__token_tTa2i(&v_9);
      if (result_1) {
         _fx_free_LT2N14Lexer__token_tTa2i(&result_1);
      }
      _fx_free_T2N14Lexer__token_tTa2i(&v_8);
      if (v_7) {
         _fx_free_LT2N14Lexer__token_tTa2i(&v_7);
      }
      _fx_free_T2N14Lexer__token_tTa2i(&v_6);
      _fx_free_T2N14Lexer__token_tTa2i(&v_5);
      _fx_free_T2N14Lexer__token_tTa2i(&v_4);
      _fx_free_N14Lexer__token_t(&v_3);
      _fx_free_T2N14Lexer__token_tTa2i(&v_2);
      _fx_free_N14Lexer__token_t(&v_1);
      _fx_free_N14Lexer__token_t(&t_0);
      _fx_free_T2iT2N14Lexer__token_tC(&v_0);
      if (paren_stack_1) {
         _fx_free_LT2N14Lexer__token_tTa2i(&paren_stack_1);
      }
      FX_FREE_STR(&buf_0);
      FX_CHECK_BREAK();
      FX_CHECK_EXN(_fx_cleanup);
   }
   FX_COPY_PTR(result_0, fx_result);

_fx_cleanup: ;
   if (result_0) {
      _fx_free_LT2N14Lexer__token_tTa2i(&result_0);
   }
   return fx_status;
}

FX_EXTERN_C int
   _fx_M5LexerFM7make_fpFPLT2N14Lexer__token_tTa2i08rTa2irirNt6option1R8format_trBrLT2N14Lexer__token_tTa2irirBN20LexerUtils__stream_t(
   struct _fx_rTa2i_data_t* arg0,
   struct _fx_ri_data_t* arg1,
   struct _fx_rNt6option1R8format_t_data_t* arg2,
   struct _fx_rB_data_t* arg3,
   struct _fx_rLT2N14Lexer__token_tTa2i_data_t* arg4,
   struct _fx_ri_data_t* arg5,
   struct _fx_rB_data_t* arg6,
   struct _fx_N20LexerUtils__stream_t_data_t* arg7,
   struct _fx_FPLT2N14Lexer__token_tTa2i0* fx_result)
{
   FX_MAKE_FP_IMPL_START(_fx_M5LexerFM10nexttokensLT2N14Lexer__token_tTa2i0_cldata_t,
      _fx_free_M5LexerFM10nexttokensLT2N14Lexer__token_tTa2i0, _fx_M5LexerFM10nexttokensLT2N14Lexer__token_tTa2i0);
   FX_COPY_PTR(arg0, &fcv->t0);
   FX_COPY_PTR(arg1, &fcv->t1);
   FX_COPY_PTR(arg2, &fcv->t2);
   FX_COPY_PTR(arg3, &fcv->t3);
   FX_COPY_PTR(arg4, &fcv->t4);
   FX_COPY_PTR(arg5, &fcv->t5);
   FX_COPY_PTR(arg6, &fcv->t6);
   FX_COPY_PTR(arg7, &fcv->t7);
   return 0;
}

FX_EXTERN_C int fx_init_Lexer(void)
{
   _fx_T2N14Lexer__token_ti v_0 = {0};
   _fx_T2N14Lexer__token_ti v_1 = {0};
   _fx_T2ST2N14Lexer__token_ti v_2 = {0};
   _fx_T2N14Lexer__token_ti v_3 = {0};
   _fx_T2ST2N14Lexer__token_ti v_4 = {0};
   _fx_T2N14Lexer__token_ti v_5 = {0};
   _fx_T2ST2N14Lexer__token_ti v_6 = {0};
   _fx_T2N14Lexer__token_ti v_7 = {0};
   _fx_T2ST2N14Lexer__token_ti v_8 = {0};
   _fx_T2N14Lexer__token_ti v_9 = {0};
   _fx_T2ST2N14Lexer__token_ti v_10 = {0};
   _fx_T2N14Lexer__token_ti v_11 = {0};
   _fx_T2ST2N14Lexer__token_ti v_12 = {0};
   _fx_T2N14Lexer__token_ti v_13 = {0};
   _fx_T2ST2N14Lexer__token_ti v_14 = {0};
   _fx_T2N14Lexer__token_ti v_15 = {0};
   _fx_T2ST2N14Lexer__token_ti v_16 = {0};
   _fx_N10Ast__lit_t v_17 = {0};
   _fx_N14Lexer__token_t v_18 = {0};
   _fx_T2N14Lexer__token_ti v_19 = {0};
   _fx_T2ST2N14Lexer__token_ti v_20 = {0};
   _fx_T2N14Lexer__token_ti v_21 = {0};
   _fx_T2ST2N14Lexer__token_ti v_22 = {0};
   _fx_T2N14Lexer__token_ti v_23 = {0};
   _fx_T2ST2N14Lexer__token_ti v_24 = {0};
   _fx_N14Lexer__token_t v_25 = {0};
   _fx_T2N14Lexer__token_ti v_26 = {0};
   _fx_T2ST2N14Lexer__token_ti v_27 = {0};
   _fx_T2N14Lexer__token_ti v_28 = {0};
   _fx_T2ST2N14Lexer__token_ti v_29 = {0};
   _fx_T2N14Lexer__token_ti v_30 = {0};
   _fx_T2ST2N14Lexer__token_ti v_31 = {0};
   _fx_N10Ast__lit_t v_32 = {0};
   _fx_N14Lexer__token_t v_33 = {0};
   _fx_T2N14Lexer__token_ti v_34 = {0};
   _fx_T2ST2N14Lexer__token_ti v_35 = {0};
   _fx_N10Ast__lit_t v_36 = {0};
   _fx_N14Lexer__token_t v_37 = {0};
   _fx_T2N14Lexer__token_ti v_38 = {0};
   _fx_T2ST2N14Lexer__token_ti v_39 = {0};
   _fx_T2N14Lexer__token_ti v_40 = {0};
   _fx_T2ST2N14Lexer__token_ti v_41 = {0};
   _fx_N14Lexer__token_t v_42 = {0};
   _fx_T2N14Lexer__token_ti v_43 = {0};
   _fx_T2ST2N14Lexer__token_ti v_44 = {0};
   _fx_T2N14Lexer__token_ti v_45 = {0};
   _fx_T2ST2N14Lexer__token_ti v_46 = {0};
   _fx_T2N14Lexer__token_ti v_47 = {0};
   _fx_T2ST2N14Lexer__token_ti v_48 = {0};
   _fx_N10Ast__lit_t v_49 = {0};
   _fx_N14Lexer__token_t v_50 = {0};
   _fx_T2N14Lexer__token_ti v_51 = {0};
   _fx_T2ST2N14Lexer__token_ti v_52 = {0};
   _fx_N10Ast__lit_t v_53 = {0};
   _fx_N14Lexer__token_t v_54 = {0};
   _fx_T2N14Lexer__token_ti v_55 = {0};
   _fx_T2ST2N14Lexer__token_ti v_56 = {0};
   _fx_N14Lexer__token_t v_57 = {0};
   _fx_T2N14Lexer__token_ti v_58 = {0};
   _fx_T2ST2N14Lexer__token_ti v_59 = {0};
   _fx_T2N14Lexer__token_ti v_60 = {0};
   _fx_T2ST2N14Lexer__token_ti v_61 = {0};
   _fx_T2N14Lexer__token_ti v_62 = {0};
   _fx_T2ST2N14Lexer__token_ti v_63 = {0};
   _fx_N14Lexer__token_t v_64 = {0};
   _fx_T2N14Lexer__token_ti v_65 = {0};
   _fx_T2ST2N14Lexer__token_ti v_66 = {0};
   _fx_N14Lexer__token_t v_67 = {0};
   _fx_T2N14Lexer__token_ti v_68 = {0};
   _fx_T2ST2N14Lexer__token_ti v_69 = {0};
   _fx_T2N14Lexer__token_ti v_70 = {0};
   _fx_T2ST2N14Lexer__token_ti v_71 = {0};
   _fx_N10Ast__lit_t v_72 = {0};
   _fx_N14Lexer__token_t v_73 = {0};
   _fx_T2N14Lexer__token_ti v_74 = {0};
   _fx_T2ST2N14Lexer__token_ti v_75 = {0};
   _fx_T2N14Lexer__token_ti v_76 = {0};
   _fx_T2ST2N14Lexer__token_ti v_77 = {0};
   _fx_T2N14Lexer__token_ti v_78 = {0};
   _fx_T2ST2N14Lexer__token_ti v_79 = {0};
   _fx_T2N14Lexer__token_ti v_80 = {0};
   _fx_T2ST2N14Lexer__token_ti v_81 = {0};
   _fx_T2N14Lexer__token_ti v_82 = {0};
   _fx_T2ST2N14Lexer__token_ti v_83 = {0};
   _fx_T2N14Lexer__token_ti v_84 = {0};
   _fx_T2ST2N14Lexer__token_ti v_85 = {0};
   _fx_N14Lexer__token_t v_86 = {0};
   _fx_T2N14Lexer__token_ti v_87 = {0};
   _fx_T2ST2N14Lexer__token_ti v_88 = {0};
   _fx_T2N14Lexer__token_ti v_89 = {0};
   _fx_T2ST2N14Lexer__token_ti v_90 = {0};
   _fx_N14Lexer__token_t v_91 = {0};
   _fx_T2N14Lexer__token_ti v_92 = {0};
   _fx_T2ST2N14Lexer__token_ti v_93 = {0};
   _fx_N14Lexer__token_t v_94 = {0};
   _fx_T2N14Lexer__token_ti v_95 = {0};
   _fx_T2ST2N14Lexer__token_ti v_96 = {0};
   _fx_N14Lexer__token_t v_97 = {0};
   _fx_T2N14Lexer__token_ti v_98 = {0};
   _fx_T2ST2N14Lexer__token_ti v_99 = {0};
   _fx_N14Lexer__token_t v_100 = {0};
   _fx_T2N14Lexer__token_ti v_101 = {0};
   _fx_T2ST2N14Lexer__token_ti v_102 = {0};
   _fx_T2N14Lexer__token_ti v_103 = {0};
   _fx_T2ST2N14Lexer__token_ti v_104 = {0};
   _fx_N14Lexer__token_t v_105 = {0};
   _fx_T2N14Lexer__token_ti v_106 = {0};
   _fx_T2ST2N14Lexer__token_ti v_107 = {0};
   _fx_N14Lexer__token_t v_108 = {0};
   _fx_T2N14Lexer__token_ti v_109 = {0};
   _fx_T2ST2N14Lexer__token_ti v_110 = {0};
   _fx_N14Lexer__token_t v_111 = {0};
   _fx_T2N14Lexer__token_ti v_112 = {0};
   _fx_T2ST2N14Lexer__token_ti v_113 = {0};
   _fx_T2N14Lexer__token_ti v_114 = {0};
   _fx_T2ST2N14Lexer__token_ti v_115 = {0};
   _fx_T2N14Lexer__token_ti v_116 = {0};
   _fx_T2ST2N14Lexer__token_ti v_117 = {0};
   _fx_T2N14Lexer__token_ti v_118 = {0};
   _fx_T2ST2N14Lexer__token_ti v_119 = {0};
   _fx_T2N14Lexer__token_ti v_120 = {0};
   _fx_T2ST2N14Lexer__token_ti v_121 = {0};
   _fx_T2N14Lexer__token_ti v_122 = {0};
   _fx_T2ST2N14Lexer__token_ti v_123 = {0};
   _fx_N14Lexer__token_t v_124 = {0};
   _fx_T2N14Lexer__token_ti v_125 = {0};
   _fx_T2ST2N14Lexer__token_ti v_126 = {0};
   _fx_T2N14Lexer__token_ti v_127 = {0};
   _fx_T2ST2N14Lexer__token_ti v_128 = {0};
   _fx_T2N14Lexer__token_ti v_129 = {0};
   _fx_T2ST2N14Lexer__token_ti v_130 = {0};
   _fx_T2N14Lexer__token_ti v_131 = {0};
   _fx_T2ST2N14Lexer__token_ti v_132 = {0};
   _fx_T2N14Lexer__token_ti v_133 = {0};
   _fx_T2ST2N14Lexer__token_ti v_134 = {0};
   _fx_T2N14Lexer__token_ti v_135 = {0};
   _fx_T2ST2N14Lexer__token_ti v_136 = {0};
   _fx_T2N14Lexer__token_ti v_137 = {0};
   _fx_T2ST2N14Lexer__token_ti v_138 = {0};
   _fx_T2N14Lexer__token_ti v_139 = {0};
   _fx_T2ST2N14Lexer__token_ti v_140 = {0};
   _fx_T2N14Lexer__token_ti v_141 = {0};
   _fx_T2ST2N14Lexer__token_ti v_142 = {0};
   _fx_T2N14Lexer__token_ti v_143 = {0};
   _fx_T2ST2N14Lexer__token_ti v_144 = {0};
   _fx_T2N14Lexer__token_ti v_145 = {0};
   _fx_T2ST2N14Lexer__token_ti v_146 = {0};
   _fx_T2N14Lexer__token_ti v_147 = {0};
   _fx_T2ST2N14Lexer__token_ti v_148 = {0};
   _fx_T2N14Lexer__token_ti v_149 = {0};
   _fx_T2ST2N14Lexer__token_ti v_150 = {0};
   _fx_LT2ST2N14Lexer__token_ti v_151 = 0;
   int fx_status = 0;
   _fx_make_T2N14Lexer__token_ti(&_fx_g10Lexer__FUN, 0, &v_0);
   _fx_make_T2N14Lexer__token_ti(&_fx_g9Lexer__AS, 1, &v_1);
   fx_str_t slit_0 = FX_MAKE_STR("as");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_0, &v_1, &v_2);
   _fx_make_T2N14Lexer__token_ti(&_fx_g12Lexer__BREAK, 0, &v_3);
   fx_str_t slit_1 = FX_MAKE_STR("break");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_1, &v_3, &v_4);
   _fx_make_T2N14Lexer__token_ti(&_fx_g12Lexer__CATCH, 1, &v_5);
   fx_str_t slit_2 = FX_MAKE_STR("catch");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_2, &v_5, &v_6);
   _fx_make_T2N14Lexer__token_ti(&_fx_g12Lexer__CLASS, 2, &v_7);
   fx_str_t slit_3 = FX_MAKE_STR("class");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_3, &v_7, &v_8);
   _fx_make_T2N14Lexer__token_ti(&_fx_g15Lexer__CONTINUE, 0, &v_9);
   fx_str_t slit_4 = FX_MAKE_STR("continue");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_4, &v_9, &v_10);
   _fx_make_T2N14Lexer__token_ti(&_fx_g9Lexer__DO, 2, &v_11);
   fx_str_t slit_5 = FX_MAKE_STR("do");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_5, &v_11, &v_12);
   _fx_make_T2N14Lexer__token_ti(&_fx_g11Lexer__ELSE, 1, &v_13);
   fx_str_t slit_6 = FX_MAKE_STR("else");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_6, &v_13, &v_14);
   _fx_make_T2N14Lexer__token_ti(&_fx_g16Lexer__EXCEPTION, 2, &v_15);
   fx_str_t slit_7 = FX_MAKE_STR("exception");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_7, &v_15, &v_16);
   _fx_M3AstFM7LitBoolN10Ast__lit_t1B(false, &v_17);
   _fx_M5LexerFM7LITERALN14Lexer__token_t1N10Ast__lit_t(&v_17, &v_18);
   _fx_make_T2N14Lexer__token_ti(&v_18, 0, &v_19);
   fx_str_t slit_8 = FX_MAKE_STR("false");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_8, &v_19, &v_20);
   _fx_make_T2N14Lexer__token_ti(&_fx_g14Lexer__FINALLY, 1, &v_21);
   fx_str_t slit_9 = FX_MAKE_STR("finally");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_9, &v_21, &v_22);
   _fx_make_T2N14Lexer__token_ti(&_fx_g11Lexer__FOLD, 2, &v_23);
   fx_str_t slit_10 = FX_MAKE_STR("fold");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_10, &v_23, &v_24);
   _fx_M5LexerFM3FORN14Lexer__token_t1B(true, &v_25);
   _fx_make_T2N14Lexer__token_ti(&v_25, 2, &v_26);
   fx_str_t slit_11 = FX_MAKE_STR("for");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_11, &v_26, &v_27);
   _fx_make_T2N14Lexer__token_ti(&_fx_g11Lexer__FROM, 2, &v_28);
   fx_str_t slit_12 = FX_MAKE_STR("from");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_12, &v_28, &v_29);
   _fx_make_T2N14Lexer__token_ti(&_fx_g10Lexer__FUN, 2, &v_30);
   fx_str_t slit_13 = FX_MAKE_STR("fun");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_13, &v_30, &v_31);
   _fx_M3AstFM8LitFloatN10Ast__lit_t2id(64, INFINITY, &v_32);
   _fx_M5LexerFM7LITERALN14Lexer__token_t1N10Ast__lit_t(&v_32, &v_33);
   _fx_make_T2N14Lexer__token_ti(&v_33, 0, &v_34);
   fx_str_t slit_14 = FX_MAKE_STR("inf");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_14, &v_34, &v_35);
   _fx_M3AstFM8LitFloatN10Ast__lit_t2id(32, INFINITY, &v_36);
   _fx_M5LexerFM7LITERALN14Lexer__token_t1N10Ast__lit_t(&v_36, &v_37);
   _fx_make_T2N14Lexer__token_ti(&v_37, 0, &v_38);
   fx_str_t slit_15 = FX_MAKE_STR("inff");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_15, &v_38, &v_39);
   _fx_make_T2N14Lexer__token_ti(&_fx_g9Lexer__IF, 2, &v_40);
   fx_str_t slit_16 = FX_MAKE_STR("if");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_16, &v_40, &v_41);
   _fx_M5LexerFM6IMPORTN14Lexer__token_t1B(true, &v_42);
   _fx_make_T2N14Lexer__token_ti(&v_42, 3, &v_43);
   fx_str_t slit_17 = FX_MAKE_STR("import");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_17, &v_43, &v_44);
   _fx_make_T2N14Lexer__token_ti(&_fx_g16Lexer__INTERFACE, 2, &v_45);
   fx_str_t slit_18 = FX_MAKE_STR("interface");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_18, &v_45, &v_46);
   _fx_make_T2N14Lexer__token_ti(&_fx_g12Lexer__MATCH, 2, &v_47);
   fx_str_t slit_19 = FX_MAKE_STR("match");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_19, &v_47, &v_48);
   _fx_M3AstFM8LitFloatN10Ast__lit_t2id(64, NAN, &v_49);
   _fx_M5LexerFM7LITERALN14Lexer__token_t1N10Ast__lit_t(&v_49, &v_50);
   _fx_make_T2N14Lexer__token_ti(&v_50, 0, &v_51);
   fx_str_t slit_20 = FX_MAKE_STR("nan");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_20, &v_51, &v_52);
   _fx_M3AstFM8LitFloatN10Ast__lit_t2id(32, NAN, &v_53);
   _fx_M5LexerFM7LITERALN14Lexer__token_t1N10Ast__lit_t(&v_53, &v_54);
   _fx_make_T2N14Lexer__token_ti(&v_54, 0, &v_55);
   fx_str_t slit_21 = FX_MAKE_STR("nanf");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_21, &v_55, &v_56);
   _fx_M5LexerFM7LITERALN14Lexer__token_t1N10Ast__lit_t(&_fx_g14Lexer__LitNull, &v_57);
   _fx_make_T2N14Lexer__token_ti(&v_57, 0, &v_58);
   fx_str_t slit_22 = FX_MAKE_STR("null");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_22, &v_58, &v_59);
   _fx_make_T2N14Lexer__token_ti(&_fx_g15Lexer__OPERATOR, 0, &v_60);
   fx_str_t slit_23 = FX_MAKE_STR("operator");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_23, &v_60, &v_61);
   _fx_make_T2N14Lexer__token_ti(&_fx_g13Lexer__PRAGMA, 2, &v_62);
   fx_str_t slit_24 = FX_MAKE_STR("pragma");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_24, &v_62, &v_63);
   _fx_M5LexerFM3REFN14Lexer__token_t1B(true, &v_64);
   _fx_make_T2N14Lexer__token_ti(&v_64, 3, &v_65);
   fx_str_t slit_25 = FX_MAKE_STR("ref");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_25, &v_65, &v_66);
   _fx_M5LexerFM6RETURNN14Lexer__token_t1B(false, &v_67);
   _fx_make_T2N14Lexer__token_ti(&v_67, 2, &v_68);
   fx_str_t slit_26 = FX_MAKE_STR("return");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_26, &v_68, &v_69);
   _fx_make_T2N14Lexer__token_ti(&_fx_g12Lexer__THROW, 2, &v_70);
   fx_str_t slit_27 = FX_MAKE_STR("throw");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_27, &v_70, &v_71);
   _fx_M3AstFM7LitBoolN10Ast__lit_t1B(true, &v_72);
   _fx_M5LexerFM7LITERALN14Lexer__token_t1N10Ast__lit_t(&v_72, &v_73);
   _fx_make_T2N14Lexer__token_ti(&v_73, 0, &v_74);
   fx_str_t slit_28 = FX_MAKE_STR("true");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_28, &v_74, &v_75);
   _fx_make_T2N14Lexer__token_ti(&_fx_g10Lexer__TRY, 2, &v_76);
   fx_str_t slit_29 = FX_MAKE_STR("try");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_29, &v_76, &v_77);
   _fx_make_T2N14Lexer__token_ti(&_fx_g11Lexer__TYPE, 2, &v_78);
   fx_str_t slit_30 = FX_MAKE_STR("type");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_30, &v_78, &v_79);
   _fx_make_T2N14Lexer__token_ti(&_fx_g10Lexer__VAL, 2, &v_80);
   fx_str_t slit_31 = FX_MAKE_STR("val");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_31, &v_80, &v_81);
   _fx_make_T2N14Lexer__token_ti(&_fx_g10Lexer__VAR, 2, &v_82);
   fx_str_t slit_32 = FX_MAKE_STR("var");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_32, &v_82, &v_83);
   _fx_make_T2N14Lexer__token_ti(&_fx_g11Lexer__WHEN, 1, &v_84);
   fx_str_t slit_33 = FX_MAKE_STR("when");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_33, &v_84, &v_85);
   _fx_M5LexerFM5WHILEN14Lexer__token_t1B(true, &v_86);
   _fx_make_T2N14Lexer__token_ti(&v_86, 2, &v_87);
   fx_str_t slit_34 = FX_MAKE_STR("while");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_34, &v_87, &v_88);
   _fx_make_T2N14Lexer__token_ti(&_fx_g11Lexer__WITH, 1, &v_89);
   fx_str_t slit_35 = FX_MAKE_STR("with");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_35, &v_89, &v_90);
   fx_str_t slit_36 = FX_MAKE_STR("__fold_result__");
   _fx_M5LexerFM8RESERVEDN14Lexer__token_t1S(&slit_36, &v_91);
   _fx_make_T2N14Lexer__token_ti(&v_91, -1, &v_92);
   fx_str_t slit_37 = FX_MAKE_STR("__fold_result__");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_37, &v_92, &v_93);
   fx_str_t slit_38 = FX_MAKE_STR("__lambda__");
   _fx_M5LexerFM8RESERVEDN14Lexer__token_t1S(&slit_38, &v_94);
   _fx_make_T2N14Lexer__token_ti(&v_94, -1, &v_95);
   fx_str_t slit_39 = FX_MAKE_STR("__lambda__");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_39, &v_95, &v_96);
   fx_str_t slit_40 = FX_MAKE_STR("__kwargs__");
   _fx_M5LexerFM8RESERVEDN14Lexer__token_t1S(&slit_40, &v_97);
   _fx_make_T2N14Lexer__token_ti(&v_97, -1, &v_98);
   fx_str_t slit_41 = FX_MAKE_STR("__kwargs__");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_41, &v_98, &v_99);
   fx_str_t slit_42 = FX_MAKE_STR("__pat__");
   _fx_M5LexerFM8RESERVEDN14Lexer__token_t1S(&slit_42, &v_100);
   _fx_make_T2N14Lexer__token_ti(&v_100, -1, &v_101);
   fx_str_t slit_43 = FX_MAKE_STR("__pat__");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_43, &v_101, &v_102);
   _fx_make_T2N14Lexer__token_ti(&_fx_g12Lexer__CCODE, 2, &v_103);
   fx_str_t slit_44 = FX_MAKE_STR("@ccode");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_44, &v_103, &v_104);
   fx_str_t slit_45 = FX_MAKE_STR("binary");
   _fx_M5LexerFM4DATAN14Lexer__token_t1S(&slit_45, &v_105);
   _fx_make_T2N14Lexer__token_ti(&v_105, 2, &v_106);
   fx_str_t slit_46 = FX_MAKE_STR("@data");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_46, &v_106, &v_107);
   fx_str_t slit_47 = FX_MAKE_STR("binary_le");
   _fx_M5LexerFM4DATAN14Lexer__token_t1S(&slit_47, &v_108);
   _fx_make_T2N14Lexer__token_ti(&v_108, 2, &v_109);
   fx_str_t slit_48 = FX_MAKE_STR("@data_le");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_48, &v_109, &v_110);
   fx_str_t slit_49 = FX_MAKE_STR("binary_be");
   _fx_M5LexerFM4DATAN14Lexer__token_t1S(&slit_49, &v_111);
   _fx_make_T2N14Lexer__token_ti(&v_111, 2, &v_112);
   fx_str_t slit_50 = FX_MAKE_STR("@data_be");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_50, &v_112, &v_113);
   _fx_make_T2N14Lexer__token_ti(&_fx_g13Lexer__INLINE, 2, &v_114);
   fx_str_t slit_51 = FX_MAKE_STR("@inline");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_51, &v_114, &v_115);
   _fx_make_T2N14Lexer__token_ti(&_fx_g14Lexer__NOTHROW, 2, &v_116);
   fx_str_t slit_52 = FX_MAKE_STR("@nothrow");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_52, &v_116, &v_117);
   _fx_make_T2N14Lexer__token_ti(&_fx_g15Lexer__PARALLEL, 2, &v_118);
   fx_str_t slit_53 = FX_MAKE_STR("@parallel");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_53, &v_118, &v_119);
   _fx_make_T2N14Lexer__token_ti(&_fx_g14Lexer__PRIVATE, 2, &v_120);
   fx_str_t slit_54 = FX_MAKE_STR("@private");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_54, &v_120, &v_121);
   _fx_make_T2N14Lexer__token_ti(&_fx_g11Lexer__SYNC, 1, &v_122);
   fx_str_t slit_55 = FX_MAKE_STR("@sync");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_55, &v_122, &v_123);
   fx_str_t slit_56 = FX_MAKE_STR("text");
   _fx_M5LexerFM4DATAN14Lexer__token_t1S(&slit_56, &v_124);
   _fx_make_T2N14Lexer__token_ti(&v_124, 2, &v_125);
   fx_str_t slit_57 = FX_MAKE_STR("@text");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_57, &v_125, &v_126);
   _fx_make_T2N14Lexer__token_ti(&_fx_g11Lexer__PURE, 2, &v_127);
   fx_str_t slit_58 = FX_MAKE_STR("@pure");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_58, &v_127, &v_128);
   _fx_make_T2N14Lexer__token_ti(&_fx_g12Lexer__UNZIP, 2, &v_129);
   fx_str_t slit_59 = FX_MAKE_STR("@unzip");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_59, &v_129, &v_130);
   _fx_make_T2N14Lexer__token_ti(&_fx_g12Lexer__PP_IF, 2, &v_131);
   fx_str_t slit_60 = FX_MAKE_STR("@if");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_60, &v_131, &v_132);
   _fx_make_T2N14Lexer__token_ti(&_fx_g15Lexer__PP_IFDEF, 2, &v_133);
   fx_str_t slit_61 = FX_MAKE_STR("@ifdef");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_61, &v_133, &v_134);
   _fx_make_T2N14Lexer__token_ti(&_fx_g16Lexer__PP_IFNDEF, 2, &v_135);
   fx_str_t slit_62 = FX_MAKE_STR("@ifndef");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_62, &v_135, &v_136);
   _fx_make_T2N14Lexer__token_ti(&_fx_g14Lexer__PP_ELIF, 1, &v_137);
   fx_str_t slit_63 = FX_MAKE_STR("@elif");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_63, &v_137, &v_138);
   _fx_make_T2N14Lexer__token_ti(&_fx_g14Lexer__PP_ELSE, 1, &v_139);
   fx_str_t slit_64 = FX_MAKE_STR("@else");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_64, &v_139, &v_140);
   _fx_make_T2N14Lexer__token_ti(&_fx_g15Lexer__PP_ENDIF, 3, &v_141);
   fx_str_t slit_65 = FX_MAKE_STR("@endif");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_65, &v_141, &v_142);
   _fx_make_T2N14Lexer__token_ti(&_fx_g16Lexer__PP_DEFINE, 2, &v_143);
   fx_str_t slit_66 = FX_MAKE_STR("@define");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_66, &v_143, &v_144);
   _fx_make_T2N14Lexer__token_ti(&_fx_g15Lexer__PP_UNDEF, 2, &v_145);
   fx_str_t slit_67 = FX_MAKE_STR("@undef");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_67, &v_145, &v_146);
   _fx_make_T2N14Lexer__token_ti(&_fx_g15Lexer__PP_ERROR, 2, &v_147);
   fx_str_t slit_68 = FX_MAKE_STR("@error");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_68, &v_147, &v_148);
   _fx_make_T2N14Lexer__token_ti(&_fx_g17Lexer__PP_WARNING, 2, &v_149);
   fx_str_t slit_69 = FX_MAKE_STR("@warning");
   _fx_make_T2ST2N14Lexer__token_ti(&slit_69, &v_149, &v_150);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_150, 0, true, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_148, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_146, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_144, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_142, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_140, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_138, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_136, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_134, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_132, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_130, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_128, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_126, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_123, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_121, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_119, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_117, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_115, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_113, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_110, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_107, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_104, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_102, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_99, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_96, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_93, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_90, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_88, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_85, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_83, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_81, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_79, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_77, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_75, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_71, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_69, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_66, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_63, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_61, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_59, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_56, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_52, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_48, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_46, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_44, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_41, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_39, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_35, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_31, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_29, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_27, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_24, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_22, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_20, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_16, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_14, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_12, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_10, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_8, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_6, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_4, v_151, false, &v_151), _fx_cleanup);
   FX_CALL(_fx_cons_LT2ST2N14Lexer__token_ti(&v_2, v_151, false, &v_151), _fx_cleanup);
   fx_str_t slit_70 = FX_MAKE_STR("");
   FX_CALL(
      _fx_M5LexerFM9from_listNt10Hashmap__t2ST2N14Lexer__token_ti3ST2N14Lexer__token_tiLT2ST2N14Lexer__token_ti(&slit_70, &v_0,
         v_151, &_fx_g21Lexer__ficus_keywords, 0), _fx_cleanup);

_fx_cleanup: ;
   _fx_free_T2N14Lexer__token_ti(&v_0);
   _fx_free_T2N14Lexer__token_ti(&v_1);
   _fx_free_T2ST2N14Lexer__token_ti(&v_2);
   _fx_free_T2N14Lexer__token_ti(&v_3);
   _fx_free_T2ST2N14Lexer__token_ti(&v_4);
   _fx_free_T2N14Lexer__token_ti(&v_5);
   _fx_free_T2ST2N14Lexer__token_ti(&v_6);
   _fx_free_T2N14Lexer__token_ti(&v_7);
   _fx_free_T2ST2N14Lexer__token_ti(&v_8);
   _fx_free_T2N14Lexer__token_ti(&v_9);
   _fx_free_T2ST2N14Lexer__token_ti(&v_10);
   _fx_free_T2N14Lexer__token_ti(&v_11);
   _fx_free_T2ST2N14Lexer__token_ti(&v_12);
   _fx_free_T2N14Lexer__token_ti(&v_13);
   _fx_free_T2ST2N14Lexer__token_ti(&v_14);
   _fx_free_T2N14Lexer__token_ti(&v_15);
   _fx_free_T2ST2N14Lexer__token_ti(&v_16);
   _fx_free_N10Ast__lit_t(&v_17);
   _fx_free_N14Lexer__token_t(&v_18);
   _fx_free_T2N14Lexer__token_ti(&v_19);
   _fx_free_T2ST2N14Lexer__token_ti(&v_20);
   _fx_free_T2N14Lexer__token_ti(&v_21);
   _fx_free_T2ST2N14Lexer__token_ti(&v_22);
   _fx_free_T2N14Lexer__token_ti(&v_23);
   _fx_free_T2ST2N14Lexer__token_ti(&v_24);
   _fx_free_N14Lexer__token_t(&v_25);
   _fx_free_T2N14Lexer__token_ti(&v_26);
   _fx_free_T2ST2N14Lexer__token_ti(&v_27);
   _fx_free_T2N14Lexer__token_ti(&v_28);
   _fx_free_T2ST2N14Lexer__token_ti(&v_29);
   _fx_free_T2N14Lexer__token_ti(&v_30);
   _fx_free_T2ST2N14Lexer__token_ti(&v_31);
   _fx_free_N10Ast__lit_t(&v_32);
   _fx_free_N14Lexer__token_t(&v_33);
   _fx_free_T2N14Lexer__token_ti(&v_34);
   _fx_free_T2ST2N14Lexer__token_ti(&v_35);
   _fx_free_N10Ast__lit_t(&v_36);
   _fx_free_N14Lexer__token_t(&v_37);
   _fx_free_T2N14Lexer__token_ti(&v_38);
   _fx_free_T2ST2N14Lexer__token_ti(&v_39);
   _fx_free_T2N14Lexer__token_ti(&v_40);
   _fx_free_T2ST2N14Lexer__token_ti(&v_41);
   _fx_free_N14Lexer__token_t(&v_42);
   _fx_free_T2N14Lexer__token_ti(&v_43);
   _fx_free_T2ST2N14Lexer__token_ti(&v_44);
   _fx_free_T2N14Lexer__token_ti(&v_45);
   _fx_free_T2ST2N14Lexer__token_ti(&v_46);
   _fx_free_T2N14Lexer__token_ti(&v_47);
   _fx_free_T2ST2N14Lexer__token_ti(&v_48);
   _fx_free_N10Ast__lit_t(&v_49);
   _fx_free_N14Lexer__token_t(&v_50);
   _fx_free_T2N14Lexer__token_ti(&v_51);
   _fx_free_T2ST2N14Lexer__token_ti(&v_52);
   _fx_free_N10Ast__lit_t(&v_53);
   _fx_free_N14Lexer__token_t(&v_54);
   _fx_free_T2N14Lexer__token_ti(&v_55);
   _fx_free_T2ST2N14Lexer__token_ti(&v_56);
   _fx_free_N14Lexer__token_t(&v_57);
   _fx_free_T2N14Lexer__token_ti(&v_58);
   _fx_free_T2ST2N14Lexer__token_ti(&v_59);
   _fx_free_T2N14Lexer__token_ti(&v_60);
   _fx_free_T2ST2N14Lexer__token_ti(&v_61);
   _fx_free_T2N14Lexer__token_ti(&v_62);
   _fx_free_T2ST2N14Lexer__token_ti(&v_63);
   _fx_free_N14Lexer__token_t(&v_64);
   _fx_free_T2N14Lexer__token_ti(&v_65);
   _fx_free_T2ST2N14Lexer__token_ti(&v_66);
   _fx_free_N14Lexer__token_t(&v_67);
   _fx_free_T2N14Lexer__token_ti(&v_68);
   _fx_free_T2ST2N14Lexer__token_ti(&v_69);
   _fx_free_T2N14Lexer__token_ti(&v_70);
   _fx_free_T2ST2N14Lexer__token_ti(&v_71);
   _fx_free_N10Ast__lit_t(&v_72);
   _fx_free_N14Lexer__token_t(&v_73);
   _fx_free_T2N14Lexer__token_ti(&v_74);
   _fx_free_T2ST2N14Lexer__token_ti(&v_75);
   _fx_free_T2N14Lexer__token_ti(&v_76);
   _fx_free_T2ST2N14Lexer__token_ti(&v_77);
   _fx_free_T2N14Lexer__token_ti(&v_78);
   _fx_free_T2ST2N14Lexer__token_ti(&v_79);
   _fx_free_T2N14Lexer__token_ti(&v_80);
   _fx_free_T2ST2N14Lexer__token_ti(&v_81);
   _fx_free_T2N14Lexer__token_ti(&v_82);
   _fx_free_T2ST2N14Lexer__token_ti(&v_83);
   _fx_free_T2N14Lexer__token_ti(&v_84);
   _fx_free_T2ST2N14Lexer__token_ti(&v_85);
   _fx_free_N14Lexer__token_t(&v_86);
   _fx_free_T2N14Lexer__token_ti(&v_87);
   _fx_free_T2ST2N14Lexer__token_ti(&v_88);
   _fx_free_T2N14Lexer__token_ti(&v_89);
   _fx_free_T2ST2N14Lexer__token_ti(&v_90);
   _fx_free_N14Lexer__token_t(&v_91);
   _fx_free_T2N14Lexer__token_ti(&v_92);
   _fx_free_T2ST2N14Lexer__token_ti(&v_93);
   _fx_free_N14Lexer__token_t(&v_94);
   _fx_free_T2N14Lexer__token_ti(&v_95);
   _fx_free_T2ST2N14Lexer__token_ti(&v_96);
   _fx_free_N14Lexer__token_t(&v_97);
   _fx_free_T2N14Lexer__token_ti(&v_98);
   _fx_free_T2ST2N14Lexer__token_ti(&v_99);
   _fx_free_N14Lexer__token_t(&v_100);
   _fx_free_T2N14Lexer__token_ti(&v_101);
   _fx_free_T2ST2N14Lexer__token_ti(&v_102);
   _fx_free_T2N14Lexer__token_ti(&v_103);
   _fx_free_T2ST2N14Lexer__token_ti(&v_104);
   _fx_free_N14Lexer__token_t(&v_105);
   _fx_free_T2N14Lexer__token_ti(&v_106);
   _fx_free_T2ST2N14Lexer__token_ti(&v_107);
   _fx_free_N14Lexer__token_t(&v_108);
   _fx_free_T2N14Lexer__token_ti(&v_109);
   _fx_free_T2ST2N14Lexer__token_ti(&v_110);
   _fx_free_N14Lexer__token_t(&v_111);
   _fx_free_T2N14Lexer__token_ti(&v_112);
   _fx_free_T2ST2N14Lexer__token_ti(&v_113);
   _fx_free_T2N14Lexer__token_ti(&v_114);
   _fx_free_T2ST2N14Lexer__token_ti(&v_115);
   _fx_free_T2N14Lexer__token_ti(&v_116);
   _fx_free_T2ST2N14Lexer__token_ti(&v_117);
   _fx_free_T2N14Lexer__token_ti(&v_118);
   _fx_free_T2ST2N14Lexer__token_ti(&v_119);
   _fx_free_T2N14Lexer__token_ti(&v_120);
   _fx_free_T2ST2N14Lexer__token_ti(&v_121);
   _fx_free_T2N14Lexer__token_ti(&v_122);
   _fx_free_T2ST2N14Lexer__token_ti(&v_123);
   _fx_free_N14Lexer__token_t(&v_124);
   _fx_free_T2N14Lexer__token_ti(&v_125);
   _fx_free_T2ST2N14Lexer__token_ti(&v_126);
   _fx_free_T2N14Lexer__token_ti(&v_127);
   _fx_free_T2ST2N14Lexer__token_ti(&v_128);
   _fx_free_T2N14Lexer__token_ti(&v_129);
   _fx_free_T2ST2N14Lexer__token_ti(&v_130);
   _fx_free_T2N14Lexer__token_ti(&v_131);
   _fx_free_T2ST2N14Lexer__token_ti(&v_132);
   _fx_free_T2N14Lexer__token_ti(&v_133);
   _fx_free_T2ST2N14Lexer__token_ti(&v_134);
   _fx_free_T2N14Lexer__token_ti(&v_135);
   _fx_free_T2ST2N14Lexer__token_ti(&v_136);
   _fx_free_T2N14Lexer__token_ti(&v_137);
   _fx_free_T2ST2N14Lexer__token_ti(&v_138);
   _fx_free_T2N14Lexer__token_ti(&v_139);
   _fx_free_T2ST2N14Lexer__token_ti(&v_140);
   _fx_free_T2N14Lexer__token_ti(&v_141);
   _fx_free_T2ST2N14Lexer__token_ti(&v_142);
   _fx_free_T2N14Lexer__token_ti(&v_143);
   _fx_free_T2ST2N14Lexer__token_ti(&v_144);
   _fx_free_T2N14Lexer__token_ti(&v_145);
   _fx_free_T2ST2N14Lexer__token_ti(&v_146);
   _fx_free_T2N14Lexer__token_ti(&v_147);
   _fx_free_T2ST2N14Lexer__token_ti(&v_148);
   _fx_free_T2N14Lexer__token_ti(&v_149);
   _fx_free_T2ST2N14Lexer__token_ti(&v_150);
   if (v_151) {
      _fx_free_LT2ST2N14Lexer__token_ti(&v_151);
   }
   return fx_status;
}

FX_EXTERN_C void fx_deinit_Lexer(void)
{
   if (_fx_g21Lexer__ficus_keywords) {
      _fx_free_Nt10Hashmap__t2ST2N14Lexer__token_ti(&_fx_g21Lexer__ficus_keywords);
   }
}

